You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在subprocess.Popen中添加scp的端口参数?

解决scp传输的两个问题:端口参数添加与主机密钥验证失败

一、正确添加端口参数的方法

你之前把scp -p 33作为单个参数传入subprocess.Popen,导致系统找不到这个命令。正确的做法是将每个命令参数拆分为列表中的独立元素,而且要注意scp指定端口的参数是大写的-P(小写-p是用来保留文件权限、修改时间等属性的,和端口无关)。

修改后的上传文件代码如下:

import subprocess
import os
# 拆分每个参数为列表元素,-P指定端口33
p = subprocess.Popen(["scp", "-P", "33", "test.txt", "root@x.x.x.x:/workspace/waic/data"])
sts = os.waitpid(p.pid, 0)

print('Done')

如果是从远程机器复制文件到本地,命令结构要调整为:

# 从远程复制到本地:scp -P 端口 远程路径 本地路径
p = subprocess.Popen(["scp", "-P", "33", "root@x.x.x.x:/远程文件路径", "./本地保存路径"])

二、解决"Host key verification failed"报错

这个错误是因为本地主机没有记录远程主机的SSH密钥,有两种解决方式:

  • 方式1:手动信任远程主机密钥
    在终端直接执行一次scp -P 33 test.txt root@x.x.x.x:/workspace/waic/data,按照提示输入yes确认信任,之后再运行Python代码就不会报错了。
  • 方式2:命令中跳过密钥验证(不推荐生产环境)
    如果需要自动化执行,可添加-o StrictHostKeyChecking=no参数跳过验证,但这种方式会降低安全性,仅适合测试环境:
p = subprocess.Popen(["scp", "-P", "33", "-o", "StrictHostKeyChecking=no", "test.txt", "root@x.x.x.x:/workspace/waic/data"])

内容的提问来源于stack exchange,提问作者marlon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:30:51