天天看点

python 下发linux命令_python3 批量管理Linux服务器 下发命令与传输文件

#!/usr/bin/env python3

#-*- coding: utf-8 -*-

importparamikoimportos, statimportsysimportoperator as opfrom string importTemplatedefssh_connect( _host, _username, _password ):

_ssh_fd=paramiko.SSHClient()

_ssh_fd.set_missing_host_key_policy( paramiko.AutoAddPolicy() )

_ssh_fd.connect( _host, username= _username, password = _password, timeout = 5)return_ssh_fddefssh_exec_cmd( _ssh_fd, _cmd ):return_ssh_fd.exec_command( _cmd )defssh_sftp( _ssh_fd, _local_path, _remote_path ):

_sftp=paramiko.SFTPClient.from_transport(_ssh_fd.get_transport())

_sftp=_ssh_fd.open_sftp()

_sftp.put(_local_path, _remote_path)#_sftp.get(_remote_path, _local_path)

_sftp.close()defssh_close( _ssh_fd ):

_ssh_fd.close()defmain(ip, password, fiperror, cmds, flag):

username= 'root'fip= open(fiperror,'a')

cmds=cmds

flag=flagtry:

sshd=ssh_connect( ip, username, password )if flag == '1':

local_path=input('local file path:')

remote_path=input('remote host path:')

local_path=os.path.join(os.getcwd(), local_path)try:

ssh_sftp(sshd, local_path, remote_path)exceptException as e:print('Error: sftp failed')for cmd incmds:

stdin, stdout, stderr=ssh_exec_cmd( sshd, cmd )

err_list=[]

err_list=stderr.readlines()

items=[]

items=stdout.readlines()for item initems:print("{} {}".format(ip, item), end='')

s= Template("nova list --${host_name}")

s= s.safe_substitute(host_name=item)

ssh_close( sshd )exceptException as e:print( 'ssh %s@%s: %s' %(username, ip, e) )

fip.writelines([ip,"\t",password,"\n"])

fip.close()if __name__ == "__main__":

with open('iplist') as f:

errfile= "/tmp/err.log"fd= open(errfile, 'w')

fd.truncate()

fd.close()

scp_flag= input('scp regular file? yes(input 1), no(input 0):')

cmds=[]

cmd= input("input the cmd you want to execute(end with 0):")while cmd != '0':

cmds.append(cmd)

cmd= input('input the cmd you want to execute(end with 0):')for line inf:

x=line.split()

ip=x[0]if len(x) == 1:

password= '123456'

else:

password= x[1]print('---------------ip address: %s--------------' %ip)

main(ip=ip, password=password, fiperror=errfile, cmds=cmds, flag=scp_flag)