Windows系统下Paramiko无法读取ssh-agent中密钥的问题如何解决?
问题根因
你遇到的问题是Windows平台原生OpenSSH Agent使用命名管道而非Unix风格套接字通信,旧版本Paramiko默认仅读取SSH_AUTH_SOCK环境变量指向的套接字路径,因此无法识别Windows系统中运行的ssh-agent。
解决步骤
- 升级Paramiko到2.9及以上版本,该版本开始原生支持Windows OpenSSH Agent的命名管道通信:
pip install --upgrade paramiko
- 若升级后仍无法读取agent密钥,可在代码头部手动指定Windows ssh-agent的命名管道路径:
import os # 仅Windows系统需要添加该行 if os.name == 'nt': os.environ['SSH_AUTH_SOCK'] = '\\\\.\\pipe\\openssh-ssh-agent'
- 调整后的完整连接代码如下:
import paramiko import os if os.name == 'nt': os.environ['SSH_AUTH_SOCK'] = '\\\\.\\pipe\\openssh-ssh-agent' def createSSHClient(server, port, user): client = paramiko.SSHClient() client.load_system_host_keys() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 显式开启agent认证和系统密钥查找,默认参数为True可省略 client.connect(server, port, username=user, allow_agent=True, look_for_keys=True) return client ssh = createSSHClient('IPADDRESS', 22, 'root')
注意事项
- 确认运行脚本的用户和执行
ssh-add添加密钥的用户为同一用户,Windows下不同用户的ssh-agent服务相互隔离 - 若使用管理员权限运行ssh-add添加密钥,也需要用相同权限运行脚本
- 执行
ssh-add -l确认目标密钥确实已加载到ssh-agent中
内容的提问来源于stack exchange,提问作者ImanityDev
相关产品推荐
相关产品推荐

