Вопрос касательно Paramiko и канала SSH - PullRequest
1 голос
/ 29 июля 2011

Простите, я ничего не знаю о сетевом программировании.

У меня есть группа серверов, на которых мне нужно выполнить обслуживание. Судо не допускается. Поэтому я должен использовать «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 по умолчанию находятся в режиме блокировки, а это означает (я думаю), может быть, есть лучший способ дождаться окончания выполнения команды и получить готовые результаты, вместо того, чтобы ставить там спящие состояния?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...