import paramiko
import sys
import getpass
import threading
import os
def pcmd(host,port=22,user='root',passwd=None,cmd=None):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host,port=port,username=user,password=passwd)
stdin,stdout,stderr = ssh.exec_command(cmd)
out = stdout.read()
err = stderr.read()
if out:
print(f'[{host}] OUT:\n {out.decode()}')
if err:
print(f'[{host}] ERR:\n {err.decode()}')
if __name__ == '__main__':
#pcmd('127.0.0.1',passwd='123456',cmd='id root;ls /root')
if len(sys.argv) < 3: # 命令加参数长度不能小于3
print(f'usage: {sys.argv[0]} ipfile commands')
exit(1)
if not os.path.isfile(sys.argv[1]): # ip地址文件必须存在
print(f'no such file:{sys.argv[1]}')
exit(2)
ipfile = sys.argv[1]
cmd = ' '.join(sys.argv[2:]) #拼接命令
passwd = getpass.getpass()
with open(ipfile) as fobj:
for line in fobj:
ip = line.strip()#去除行尾\n
pcmd(ip,22,'root',passwd,cmd)
t = threading.Thread(target=pcmd,args=(ip,22,'root',passwd,cmd))
t.start()