pythonスクリプトによる一括リモート導入ホストの実現

8074 ワード

pythonスクリプトによる一括リモート導入ホストの実現
このスクリプトは、位置パラメータを記入することによってリモートホストを一括配置する機能を実現し、位置パラメータ1はホストipリストに記入し、位置パラメータ2は実行コマンドを記入する(実行コマンドは「」に記入する)
#!/root/bin/python
import paramiko
import sys
import getpass
import threading

def rcmd(host,user = 'student',passwd = None,port=22,commands = None):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(host,username=user,password=passwd,port=port)
    stdin,stdout,stderr = ssh.exec_command(commands)
    out = stdout.read()
    err = stderr.read()
    if out:
        print('[\033[032;1m%s\033[0m] OUT:
%s'
% (host,out.decode())) if err: print('[\033[31;1m%s\033[0m] ERROR:
%s'
% (host,err.decode())) if __name__ == '__main__': if len(sys.argv) !=3: print('Usage:%s ipfile "commands"'% sys.argv[0]) exit(1) if not os.path.isfile(sys.argv[1]): print('no such file :%s'% sys.argv[1]) exit(2) ipfile = sys.argv[1] commands = sys.argv[2] passwd = getpass.getpass() with open(ipfile) as fobj: for line in fobj: ip = line.strip() # rcmd(ip,passwd=passwd,commands=commands) t = threading.Thread(target=rcmd,args=(ip,),kwargs={'passwd':passwd,'commands':commands}) t.start()