Мне нужна программа 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 в качестве средства контроля нормального потока выполнения кода - он должен использоваться для обнаружения фактических ошибок, таких как неправильный ключ хоста, недопустимый пользователь и т.д.