gpt4 book ai didi

python - 使用 paramiko 检查 SSH 是否可以完成

转载 作者:行者123 更新时间:2023-12-02 14:07:16 24 4
gpt4 key购买 nike

我正在尝试对路由器的所有端口进行自动以太网带宽测试。我的设置涉及从具有 1 个连接的 Windows PC 连接到路由器和具有 7 个连接的 Linux PC。我正在使用 Paramiko 模块通过 SSH 连接到 Linux PC 以启动运行良好的以太网测试。

但是,我想看看如果我在测试中移除其中一根以太网电缆会发生什么。这会导致程序崩溃,并说“尝试对无法访问的主机进行套接字操作”。我希望能够避免这个错误。有没有办法检查连接是否可行,以免我崩溃?理想情况下,我希望代码跳过不良连接并继续使用下一条电缆。这是使用的代码片段:

    ssh.connect( hostname = target_host[i] , username = un, password = pwd )
stdin, stdout, stderr = ssh.exec_command('iperf -c 192.168.0.98')
t_read=stdout.read()
read[i]=t_read[360:375]
raw_speed[i]=t_read[360:364]
address[i]=t_read[221:233]
print('Receieved data on cable %s from %s via IP: %s at %s \n'%(Cable[i],WMI_Port[i],address[i],read[i]))
stdin, stdout, stderr = ssh.exec_command('sudo ifconfig %s down'%(target_eth[i]))
print ('Disabling %s : \n\n'%(WMI_Port[i]))
ssh.close()

最佳答案

避免此错误的最简单方法是不做导致它的原因 - 拉电缆。但是,您似乎希望能够在您的程序中处理它,所以这里有一些选项! (我假设这个片段位于基于主机列表的某种循环中。)

选项 1:
您可以在尝试连接之前抢先检查该地址的主机是否处于事件状态。将 ssh 连接代码包装在 ifos.system("ping -c 1 " + target_host[i]) is 0 的声明因为条件将允许您跳过死主机上的连接。

选项 2:
另一种方法是先尝试,然后处理失败。如果你包装所有来自 ssh.connect(...)ssh.close()在监视 paramiko.ssh_exception.NoValidConnectionsError 的 try-except block 中,您可以随心所欲地处理失败的连接并继续执行该程序。一个例子:

for i in len(target_host):
try:
ssh.connect( hostname = target_host[i] , username = un, password = pwd )
stdin, stdout, stderr = ssh.exec_command('iperf -c 192.168.0.98')
t_read=stdout.read()
read[i]=t_read[360:375]
raw_speed[i]=t_read[360:364]
address[i]=t_read[221:233]
print('Receieved data on cable %s from %s via IP: %s at %s \n'%(Cable[i],WMI_Port[i],address[i],read[i]))
stdin, stdout, stderr = ssh.exec_command('sudo ifconfig %s down'%(target_eth[i]))
print ('Disabling %s : \n\n'%(WMI_Port[i]))
ssh.close()
except paramiko.ssh_exception.NoValidConnectionsError as error:
print("Failed to connect to host '%s' with error: %s" % (target_host[i], error))

该异常可能与您在转储时得到的不完全相同,因此请将其替换为您之前获得的异常。处理程序与预期异常匹配得越紧密越好。处理程序太宽泛可能会吞噬您需要查看的异常,从而导致静默失败。

有关 Paramiko 异常的更多信息,请查看此处: http://docs.paramiko.org/en/2.4/api/ssh_exception.html

有关在 Python 3 中处理异常的信息:
https://docs.python.org/3/tutorial/errors.html

关于python - 使用 paramiko 检查 SSH 是否可以完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48589963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com