Простите, я ничего не знаю о сетевом программировании.
У меня есть группа серверов, на которых мне нужно выполнить обслуживание. Судо не допускается. Поэтому я должен использовать «su -» для повышения уровня пользователя root, а затем выполнить список задач от имени пользователя root и получить результаты каждой команды, чтобы я мог просмотреть журналы позже. У меня сейчас работает скрипт, но он кажется хакерским, и я думаю, что должен быть лучший способ сделать то, что я делаю.
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(<my connection details>)
channel = ssh.invoke_shell()
try:
channel.send("su -\n")
while not channel.recv_ready():
print "Waiting for root challenge..."
time.sleep(2)
results += channel.recv(1024)
channel.send("%s\n" % rootpass)
while not channel.recv_ready():
print "Authenticating..."
time.sleep(2)
results += channel.recv(1024)
channel.send("yum update <rpm>\n")
while not channel.recv_ready():
print "Working on yum update..."
time.sleep(10)
results += channel.recv(1024)
except Exception, e:
print e
return results
1) Time.sell чувствую себя хакерской. Некоторые из команд, например, «yum update», возвращают много текста, поэтому я добавил более длинный интервал времени для проверки recv_ready (), потому что я предпочел бы не получать частичный результат.
2) Я не понимаю блокирование против неблокирования. Я думаю, что каналы в Paramiko по умолчанию находятся в режиме блокировки, а это означает (я думаю), может быть, есть лучший способ дождаться окончания выполнения команды и получить готовые результаты, вместо того, чтобы ставить там спящие состояния?