0

こんにちはみんな私は3つのサーバーを持っていて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

ファブリックを見ることをお勧めします。SSH接続の操作に役立つ場合があります。

于 2011-06-07T12:45:13.870 に答える
1

ホストから6時間ログアウトしていないため、現在の方法はブロックされます。

マルチプロセッシング:

スクリプトからのリターンコードを確認する必要がある場合は、Pythonのマルチプロセッシングモジュールを使用して各ホストへの接続を開く必要があります。

nohup:

別の方法(を介してスクリプトの戻り値を確認することはできません)は、シェルからスクリプトの関連付けを解除するparamikoために使用することです。nohupこれにより、バックグラウンドでログアウトできるようになります。これを行うには...

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

タイプミス:

ところで、最後のループにタイプミスがありました...最後のループにあるZI2はずZI3です...さらに、for-loopsは不要です...最後の反復を修正しました...OPの詳細を見つけるために@johnsywebに確認します私よりもタイプミス...

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

もう1つの方法は、Register.pyの戻りに基づいて何らかのアクションを実行する必要がある場合にスレッドを使用することです。

例を参照してください:

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 に答える