0

大家好,我有三台服务器,我从 SSH 管理它,所以我制作了这个脚本来运行我的注册脚本“Register.py”,所以我每天都打开注册模式,所以问题是我如何在不关闭另一个的情况下登录到多个 SSH 连接

import paramiko
import os
ZI1={"ip":"192.168.1.2","pass":"Administrator"}
ZI2={"ip":"192.168.1.3","pass":"AdminTeachers"}
ZI3={"ip":"192.168.1.4","pass":"AdminStudents"}
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for F1 in ZI1:
    ssh.connect(ZI1["ip"],username='root', password=ZI1["pass"])
    ssh.exec_command('./register.py -time 6') #6 hour so the script still working for 6 hours
    ssh.close()
for F2 in ZI2:
    ssh.connect(ZI2["ip"],username='root', password=ZI2["pass"])
    ssh.exec_command('./register.py -time 6')
    ssh.close()
for F3 in ZI3:
    ssh.connect(ZI2["ip"],username='root', password=ZI2["pass"])
    ssh.exec_command('./register.py -time 6')
    ssh.close()

所以我必须做什么才能在不停止脚本的情况下打开 3 个会话!

4

3 回答 3

1

我建议看看Fabric。它可以帮助您处理 SSH 连接。

于 2011-06-07T12:45:13.870 回答
1

您当前执行此操作的方式会阻塞,因为您没有在六个小时内退出主机。

多处理:

如果您需要查看脚本的返回码,您应该使用python 的 multiprocessing 模块打开与每个主机的连接。

nohup:

另一种方法(不允许您通过 看到脚本的返回值paramiko)是用于nohup解除脚本与外壳的关联。这会将其置于后台并允许您注销。要做到这一点,使用...

    ssh.exec_command('nohup ./register.py -time 6 &') 

错别字:

顺便说一句,你在最后一个循环中有错别字......ZI2应该ZI3在最后一个循环中......此外,for-loops是不必要的......我修复了你的最后一次迭代......感谢@johnsyweb发现更多的OP错别字比我...

ssh.connect(ZI3["ip"],username='root', password=ZI3["pass"])
ssh.exec_command('./register.py -time 6')   # <------------- missing s in ssh
ssh.close()
于 2011-06-07T12:45:48.363 回答
0

如果您需要根据 Register.py 的返回执行一些操作,另一种方法是使用 Thread

参见示例:

import paramiko
import os
import sys
from threading import Thread

SERVER_LIST = [{"ip":"192.168.1.2","pass":"Administrator"},{"ip":"192.168.1.4","pass":"AdminStudents"},{"ip":"192.168.1.3","pass":"AdminTeachers"}]



class ExecuteRegister(Thread):
    def __init__ (self,options):
        Thread.__init__(self)
        self.options = options       
        self.ssh = paramiko.SSHClient()
        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())



    def run(self):
        try:
           self.ssh.connect(self.options['ip'],username='root', password=self.options["pass"])
           self.ssh.exec_command('./register.py -time 6') #6 hour so the script still working for 6 hours
           self.ssh.close()
        except:
           print sys.exc_info()



for server in SERVER_LIST:
    Register = ExecuteRegister(server)
    Register.start()
于 2011-06-07T12:59:36.643 回答