#!/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)