原谅我,我对网络编程一无所知。
我有一组服务器需要执行维护。 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中的频道默认处于阻塞模式,这意味着(我认为)可能有更好的方式等待命令完成并获得完成的结果,而不是将睡眠放在那里?