我需要一个Python程序,我用它来轮询远程服务器以获得SSH连接,并在它可用时通知。我目前正在使用paramiko这样做;尝试连接,如果失败,请等待并重试,直到成功或最大重试。这有效,但它有点笨重。 paramiko似乎连接或抛出错误,所以我能看到的唯一方法是使用try / except块,这是坏的,坏的,坏的。这是方法:
def check_ssh(self, ip, user, key_file, initial_wait=0, interval=0, retries=1):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sleep(initial_wait)
for x in range(retries):
try:
ssh.connect(ip, username=user, key_filename=key_file)
return True
except Exception, e:
print e
sleep(interval)
return False
必须有比这更优雅的解决方案。 Paramiko是我选择的SSH库,但我对这里的任何建议持开放态度。
为了澄清,我想避免使用try / except作为控制正常代码执行流程的手段 - 它应该用于捕获实际错误,例如错误的主机密钥,无效的用户等。