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

使用Python scp库传输文件时遇AttributeError: getpeername错误的求助

错误成因

scp.SCPClient的初始化参数并非IP、用户名、密码这类字符串,它要求接收一个已建立连接的paramiko Transport对象(或SSHClient实例调用get_transport()返回的对象)。你直接传入字符串形式的IP,导致代码将字符串误当作transport对象调用getpeername()方法,而字符串本身没有这个属性,因此触发AttributeError。

解决方法

scp库依赖paramiko实现SSH连接,正确步骤是先通过paramiko建立SSH会话,再将会话的transport对象传入SCPClient:

  1. 确保安装依赖(如果没装):
pip install paramiko scp
  1. 修正后的代码:
import paramiko
from scp import SCPClient

# 建立SSH连接
ssh_client = paramiko.SSHClient()
# 自动添加未知主机密钥(生产环境建议手动配置known_hosts)
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect("你的服务器IP", username="你的用户名", password="你的密码")

# 用with管理SCPClient资源,自动释放连接
with SCPClient(ssh_client.get_transport()) as scp_client:
    # 从远程下载文件到本地,Windows路径用原始字符串或双反斜杠
    scp_client.get('remote/file', r'C:\folder')

# 关闭SSH连接
ssh_client.close()

注意事项

  • Windows本地路径要避免转义问题,要么用原始字符串(加r前缀),要么把单斜杠改成双反斜杠(C:\\folder)
  • 生产环境不要使用AutoAddPolicy(),应手动将服务器主机密钥添加到本地known_hosts文件,防止中间人攻击
  • 使用with语句可以自动关闭SCPClient,无需手动调用close()方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:57:21