AttributeError: module 'paramiko.win_pageant' has no attribute 'can_talk_to_agent' when connecting using Paramiko from Windows Server
AttributeError: module 'paramiko.win_pageant' has no attribute 'can_talk_to_agent' when connecting using Paramiko from Windows Server
我目前正在开发一个程序,该程序试图联系 运行 Cisco IOS 的众多路由器以获取它们的当前配置。我正在尝试使用 Paramiko 模块的 SSHClient
对象来实现这一点:
def get_config(file_path, ip, ip_number):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port=22, username="user", password="pw", look_for_keys=False, timeout=None)
stdin,stdout, stderr = ssh.exec_command("show running-config \n")
之后,配置将写入子文件夹内的特定文件,该文件的名称为变量 ip_number
。因为这是用一百多个路由器完成的,所以我尝试使用线程模块来加速这个过程。当我一次使用更多线程时,我保持 运行ning 的问题开始更频繁地发生,所以我让程序一次只能使用 14 个线程(服务器 运行ning 在 14核心 CPU) 以这种方式:
amount_ip_blocks = int(len(ip_list))/14
if len(ip_list) - 14*amount_ip_blocks != 0:
amount_remaining_ips = len(ip_list) - 14*amount_ip_blocks
for j in range (0, amount_ip_blocks):
threads = []
for i in range (j*14, j*14 + 14):
thread = threading.Thread(target=get_config, args=(path, ip_list[i], i,))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
最后,对剩余的 IP 执行相同的操作。
现在,在处理第一个 14 个 IP 块时,此代码在不同的线程(并不总是 thread-1)上一次出现 0 到 4 次不一致的异常:
Exception in thread Thread-1:
Traceback (most recent call last):
File "D:\Program Files\Python\lib\threading.py", line 932, in _bootstrap_inner
self.run()
File "D:\Program Files\Python\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "D:\location_of_my_program\config_getter.py", line 99, in get_config
ssh.connect(ip, port=22, username="user", password="pw", look_for_keys=False, timeout=None)
File "D:\Program Files\Python\lib\site-packages\paramiko-2.7.2-py3.8.egg\paramiko\client.py", line 435, in connect
File "D:\Program Files\Python\lib\site-packages\paramiko-2.7.2-py3.8.egg\paramiko\client.py", line 691, in _auth
File "D:\Program Files\Python\lib\site-packages\paramiko-2.7.2-py3.8.egg\paramiko\agent.py", line 372, in __init__
AttributeError: module 'paramiko.win_pageant' has no attribute 'can_talk_to_agent'
我曾尝试在网上查找此异常,但没有找到任何信息。我也尝试查看 paramiko 的代码,看看它对我是否有意义,但无济于事。最后,我尝试调整 IP 块的大小,较小的块似乎不太经常引起问题,如果发生,它总是在第一个 IP 块上发生。经过广泛的实验,我无法推断出任何规律性。
有没有办法解决这个问题?或者根本不可能同时/在同一个程序中有多个 SSH 连接 运行 paramiko?
或者更好的是,有人知道这个问题是怎么发生的吗?
我没有解决方案,但也许有解决方法。由于您似乎没有使用代理,您是否尝试将其关闭?
在 SSHClient.connect
调用中设置 allow_agent=False
。
我目前正在开发一个程序,该程序试图联系 运行 Cisco IOS 的众多路由器以获取它们的当前配置。我正在尝试使用 Paramiko 模块的 SSHClient
对象来实现这一点:
def get_config(file_path, ip, ip_number):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port=22, username="user", password="pw", look_for_keys=False, timeout=None)
stdin,stdout, stderr = ssh.exec_command("show running-config \n")
之后,配置将写入子文件夹内的特定文件,该文件的名称为变量 ip_number
。因为这是用一百多个路由器完成的,所以我尝试使用线程模块来加速这个过程。当我一次使用更多线程时,我保持 运行ning 的问题开始更频繁地发生,所以我让程序一次只能使用 14 个线程(服务器 运行ning 在 14核心 CPU) 以这种方式:
amount_ip_blocks = int(len(ip_list))/14
if len(ip_list) - 14*amount_ip_blocks != 0:
amount_remaining_ips = len(ip_list) - 14*amount_ip_blocks
for j in range (0, amount_ip_blocks):
threads = []
for i in range (j*14, j*14 + 14):
thread = threading.Thread(target=get_config, args=(path, ip_list[i], i,))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
最后,对剩余的 IP 执行相同的操作。
现在,在处理第一个 14 个 IP 块时,此代码在不同的线程(并不总是 thread-1)上一次出现 0 到 4 次不一致的异常:
Exception in thread Thread-1:
Traceback (most recent call last):
File "D:\Program Files\Python\lib\threading.py", line 932, in _bootstrap_inner
self.run()
File "D:\Program Files\Python\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "D:\location_of_my_program\config_getter.py", line 99, in get_config
ssh.connect(ip, port=22, username="user", password="pw", look_for_keys=False, timeout=None)
File "D:\Program Files\Python\lib\site-packages\paramiko-2.7.2-py3.8.egg\paramiko\client.py", line 435, in connect
File "D:\Program Files\Python\lib\site-packages\paramiko-2.7.2-py3.8.egg\paramiko\client.py", line 691, in _auth
File "D:\Program Files\Python\lib\site-packages\paramiko-2.7.2-py3.8.egg\paramiko\agent.py", line 372, in __init__
AttributeError: module 'paramiko.win_pageant' has no attribute 'can_talk_to_agent'
我曾尝试在网上查找此异常,但没有找到任何信息。我也尝试查看 paramiko 的代码,看看它对我是否有意义,但无济于事。最后,我尝试调整 IP 块的大小,较小的块似乎不太经常引起问题,如果发生,它总是在第一个 IP 块上发生。经过广泛的实验,我无法推断出任何规律性。 有没有办法解决这个问题?或者根本不可能同时/在同一个程序中有多个 SSH 连接 运行 paramiko? 或者更好的是,有人知道这个问题是怎么发生的吗?
我没有解决方案,但也许有解决方法。由于您似乎没有使用代理,您是否尝试将其关闭?
在 SSHClient.connect
调用中设置 allow_agent=False
。