Azure自动化账户中使用Paramiko建立SSH连接时遇OSError错误求助
问题描述
在Azure自动化账户中运行Python脚本,使用paramiko通过SFTP传输数据,本地运行正常,但云环境执行时调用ssh.connect()报错,错误栈如下:
Traceback (most recent call last): File "C:\Temp\vjtgkdb0.eh1\xxxxxxx", line 587, in <module> generate_files() File "C:\Temp\xxxxx", line 50, in generate_files ssh.connect(hostname=ftp_host, port=ftp_port, username=ftp_user, password=ftp_pwd) File "C:\WPy64-3800\python-3.8.0.amd64\lib\site-packages\paramiko\client.py", line 459, in connect self._auth( File "C:\WPy64-3800\python-3.8.0.amd64\lib\site-packages\paramiko\client.py", line 717, in _auth self._agent = Agent() File "C:\WPy64-3800\python-3.8.0.amd64\lib\site-packages\paramiko\agent.py", line 403, in __init__ conn = get_agent_connection() File "C:\WPy64-3800\python-3.8.0.amd64\lib\site-packages\paramiko\agent.py", line 230, in get_agent_connection elif win_openssh.can_talk_to_agent(): File "C:\WPy64-3800\python-3.8.0.amd64\lib\site-packages\paramiko\win_openssh.py", line 32, in can_talk_to_agent return any(name == n.lower() for n in os.listdir(dir_) OSError: [WinError 1] Incorrect function: '\\\\.\\pipe\\'
连接代码:
ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=ftp_host, port=ftp_port, username=ftp_user, password=ftp_pwd)
解决方案
这个错误是因为paramiko默认会尝试连接SSH代理,但Azure自动化账户的Windows环境中没有SSH代理服务,导致遍历管道目录时出错。解决方法是在connect调用中显式禁用代理:
- 修改
ssh.connect方法,添加allow_agent=False参数,跳过SSH代理自动检测:
ssh.connect( hostname=ftp_host, port=ftp_port, username=ftp_user, password=ftp_pwd, allow_agent=False # 关键:禁用SSH代理检测 )
- 额外优化:如果仍有问题,可同时添加
look_for_keys=False,避免尝试查找本地密钥文件(Azure自动化环境中不存在这类文件):
ssh.connect( hostname=ftp_host, port=ftp_port, username=ftp_user, password=ftp_pwd, allow_agent=False, look_for_keys=False )
修改后,paramiko会直接使用提供的用户名密码认证,适配Azure自动化的运行环境。
内容的提问来源于stack exchange,提问作者Linx
相关产品推荐
相关产品推荐

