好的,所以这个问题的答案可能只是“停止使用并行 ssh 并使用 netmiko/paramiko 编写自己的代码。另外,已经升级到 python 3。”
但这是我的问题:我正在使用parallel-ssh尝试一次访问多达 80 个设备。这些设备是出了名的不可靠,并且它们偶尔会在提供一两行输出后冻结。然后,parallel-ssh 代码挂了几个小时,让脚本运行,直到我杀死它。一个周末后,我跳到运行脚本的虚拟机上,看到一份工作被卡住了 52 小时。
我的第一个代码的相关部分,即挂起的部分:
from pssh.pssh2_client import ParallelSSHClient
def remote_ssh(ip_list, ssh_user, ssh_pass, cmd):
client = ParallelSSHClient(ip_list, user=ssh_user, password=ssh_pass, timeout=180, retry_delay=60, pool_size=100, allow_agent=False)
result = client.run_command(cmd, stop_on_errors=False)
return result
接下来我尝试的是channel_timout选项,因为如果获得命令输出需要超过 4 分钟,那么我知道设备冻结了,我需要继续并稍后在脚本中循环它:
from pssh.pssh_client import ParallelSSHClient
def remote_ssh(ip_list, ssh_user, ssh_pass, cmd):
client = ParallelSSHClient(ip_list, user=ssh_user, password=ssh_pass, channel_timeout=180, retry_delay=60, pool_size=100, allow_agent=False)
result = client.run_command(cmd, stop_on_errors=False)
return result
这个版本从来没有真正连接到任何东西。有什么建议吗?除了 channel_timeout 之外,我找不到任何东西来尝试在一定时间后终止 ssh 会话。