有关Paramiko和SSH频道的问题

时间:2011-07-29 16:03:17

标签: python network-programming ssh paramiko

原谅我,我对网络编程一无所知。

我有一组服务器需要执行维护。 Sudo是不被允许的。因此,我必须使用“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.sleep感到hackish。一些命令,比如“yum update”会返回大量文本,所以我在recv_ready()检查上放了更长的时间间隔,因为我不希望收到部分结果。
2)我不明白阻塞与非阻塞。我认为Paramiko中的频道默认处于阻塞模式,这意味着(我认为)可能有更好的方式等待命令完成并获得完成的结果,而不是将睡眠放在那里?

0 个答案:

没有答案