Windows下使用Paramiko读取OpenSSH认证代理密钥时出现无效参数错误
解决Paramiko调用Agent().get_keys()时的[Errno 22] Invalid argument错误
问题场景
使用paramiko.agent.Agent().get_keys()列出RSA密钥时,抛出异常:[Errno 22] Invalid argument: '\\.\pipe\openssh-ssh-agent',环境为OpenSSH_for_Windows_8.9p1(已运行OpenSSH服务器)。
解决方案
1. 手动指定SSH_AUTH_SOCK环境变量
Paramiko默认适配的是PuTTY Pageant的管道路径,而非OpenSSH for Windows的管道。在代码中显式设置环境变量指向OpenSSH的agent管道:
import os from paramiko import agent # 指向OpenSSH agent的管道路径 os.environ['SSH_AUTH_SOCK'] = r'\\.\pipe\openssh-ssh-agent' print(agent.Agent().get_keys())
也可以在系统环境变量中添加SSH_AUTH_SOCK,值设为\\.\pipe\openssh-ssh-agent,之后重启Python运行环境。
2. 验证OpenSSH Agent状态与密钥
打开PowerShell执行ssh-add -l,如果能列出已添加的密钥,说明agent运行正常;若提示无密钥,执行ssh-add添加本地密钥。
3. 升级Paramiko版本
较新版本的Paramiko(如2.12.0及以上)已优化对OpenSSH for Windows agent的支持,升级后可能无需手动设置环境变量:
pip install --upgrade paramiko
原因说明
Paramiko的Agent类最初针对Unix系统和PuTTY Pageant设计,在Windows环境下默认的管道路径与OpenSSH for Windows的agent管道不匹配,导致无法连接,需手动指定正确路径或升级库来适配。
内容的提问来源于stack exchange,提问作者OneTouchForHeight
相关产品推荐
相关产品推荐

