import paramiko
def ssh_anto(host,port=22,user=None,ps=None,cm=None):
#创建sshd连接客户端
ssh = paramiko.SSHClient()
#自动接受服务器第一次秘钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#建立连接服务器
ssh.connect(host,port,user,ps)
#执行命令输出是3项元祖
stdin,stdout,stderr = ssh.exec_command(cm)
out = stdout.read()#命令正确输出
err = stderr.read()#命令错误输出
if out:
print('正确输出:%s' %out.decode())
if err:
print('[%s]\033[31;1mERROR\033[0m:\n%s'%(host,err.decode()))
if __name__ == '__main__':
ssh_anto('127.0.0.1',port=22,user='root',ps='123123',cm='id root;id xx')
执行结果:
多线程处理提高效率
import paramiko
import sys
import getpass
import threading
import os
def ssh_anto(host,port,user=None,ps=None,cm=None):
#创建sshd连接客户端
ssh = paramiko.SSHClient()
#自动接受服务器第一次秘钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#建立连接服务器
ssh.connect(host,port,user,ps)
#执行命令输出是3项元祖
stdin,stdout,stderr = ssh.exec_command(cm)
out = stdout.read()#命令正确输出
err = stderr.read()#命令错误输出
if out:
print('[%s]OUT:\n]正确输出:%s' %(host,out.decode()))
if err:
print('[%s]\033[31;1mERROR\033[0m:\n%s' %(host,err.decode()))
if __name__ == '__main__':
if len(sys.argv)<2:
print('Usge:%s ipfile command'%sys.argv[0])
exit(1)
if not os.path.isfile(sys.argv[1]):
print('No such file',sys.argv[1])
exit(2)
ipfile = sys.argv[1]
cm = " ".join(sys.argv[2:])
ps = getpass.getpass()
with open(ipfile) as fobj:
for line in fobj:
host = line.strip()#去除空格
t = threading.Thread(target=ssh_anto,args=(host,22,"root",ps,cm))
t.start()
测试结果: