【发布时间】:2011-08-07 14:14:48
【问题描述】:
我管理 3 台服务器 [Linux],我必须每 6 小时打开这些服务器上的脚本
所以每次登录都需要一点时间..所以我编写了这段代码
import paramiko
import os
ZI1={"ip":"192.168.1.2","pass":"server-1"}
ZI2={"ip":"192.168.1.3","pass":"Server-2"}
ZI3={"ip":"192.168.1.4","pass":"server-3"}
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
SPAM=1
while SPAM==3:
ssh.connect(ZI1["ip"],username='root', password=ZI1["pass"])
stdin, stdout, stderr = ssh.exec_command('perl Register.pl')
print stdout.readlines()
SPAM+=1
ssh.connect(ZI2["ip"],username='root', password=ZI2["pass"])
stdin, stdout, stderr = ssh.exec_command('perl Register.pl')
print stdout.readlines()
SPAM+=1
ssh.connect(ZI2["ip"],username='root', password=ZI2["pass"])
stdin, stdout, stderr = ssh.exec_command('perl Register.pl')
print stdout.readlines()
ssh.close()
SPAM+=1
好吧,它工作得不好;(我想输入每一个并运行脚本并转到 另一个服务器没有关闭连接或终止脚本,所以请帮助我。
编辑后
现在我编辑它,我遇到了新问题
我将此添加到我的代码中:
import paramiko
import os
ZI1={"ip":"192.168.1.2","pass":"server-1"}
ZI2={"ip":"192.168.1.3","pass":"Server-2"}
ZI3={"ip":"192.168.1.4","pass":"server-3"}
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for F1 in ZI1:
ssh.connect(ZI1["ip"],username='root', password=ZI1["pass"])
stdin, stdout, stderr = ssh.exec_command('uname -a')
print stdout.readlines()
ssh.close()
for F2 in ZI2:
ssh.connect(ZI2["ip"],username='root', password=ZI2["pass"])
ssh.exec_command('ls -la')
print stdout.readlines()
ssh.close()
for F3 in ZI3:
ssh.connect(ZI2["ip"],username='root', password=ZI2["pass"])
ssh.exec_command('pwd')
print stdout.readlines()
ssh.close()
我给每个不同的命令看看它是否有效,我得到了非常奇怪的输出
['Linux xxxx 2.6.18-028stab070.14 #1 SMP Thu Nov 18 16:04:02 MSK 2010 x
86_64 x86_64 x86_64 GNU/Linux\n']
['Linux xxxx 2.6.18-028stab070.14 #1 SMP Thu Nov 18 16:04:02 MSK 2010 x
86_64 x86_64 x86_64 GNU/Linux\n']
[]
[]
[]
[]
我说第一台服务器执行命令uname -a,第二台服务器执行命令ls -la,但它将它们一起提供相同的命令第三台服务器不执行任何操作
【问题讨论】:
-
什么“效果不好”?连接已关闭?
-
你的代码有逻辑问题。
while块永远不会执行。并不是说这是您的主要问题,而是其中之一。 -
如果
while块永远不会执行,我该怎么办!?嘿,我的朋友 zengr,我的意思是完全脚本不能正常工作! -
也许你应该在做这样的事情之前再运行一次Python tutorial。您的代码将通过一些更好的结构得到很大改进,例如将 ZI1..3 放在一个列表中并使用
for迭代该列表。您甚至根本不需要SPAM变量。 -
为什么不在远程主机上从 cron 运行脚本?