python的paramiko模块实现远程控制和传输示例
本文介绍了python的paramiko模块实现远程控制和传输示例,分享给大家,具体如下:
1安装
sudopipinstallparamiko
2ssh实现远程控制
#LINUX下执行shell sshusername@ip#输入密码后就可以对远程机器进行操作 sshusername@ipcommand#输入密码后远程机器就执行command
ssh运行后,想退出,可以kill掉ssh进程。
3paramiko实现ssh
importparamiko hostname='10.1.111.111' username='root' password='111111' port=22#整数不是字符串 paramiko.util.log_to_file('paramiko.log') ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#允许连接不在know_hosts文件中的主机 ssh.connect(hostname=hostname,port=port,username=username,password=password) stdin,stdout,stderr=ssh.exec_command("ls")#远程执行shell命令 print(stdout.readlines())#输出回显结果 ssh.close()
exec_command命令,以分号;分隔表示先后执行两个命令;可以传入多个参数;exec_command为单个会话,执行完成之后会回到登录时的缺省目录,如下:
a='~/Videos' b='aaa' ssh.exec_command('cd%s;mkdir%s'%(a,b))#aaa在a目录下 ssh.exec_command('mkdiraaa')#aaa在缺省目录下
远端执行命令时如果有交互,可以这样用stdin.write(“”)来完成。
注意:
(1)sudo后要加-S,表示从stdin接收密码;
(2)stdin.write(‘password\n')最后要加\n作为命令的结束,否则服务器一直等待;
(3)flush()写入的缓冲(flush()anybufferyou'rewritingto)
stdin,stdout,stderr=ssh.exec_command('sudo-Sls') stdin.write('password\n') stdin.flush()
可以利用多进程或线程可以批量执行命令:
importparamiko importthreading defssh_cmd(ip,port,username,passwd,cmd): ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(ip,port,username,passwd) formincmd: stdin,stdout,stderr=ssh.exec_command(m) print(stdout.readlines()) ssh.close() if__name__=='__main__': cmd=['ls','ifconfig'] a=threading.Thread(target=ssh_cmd,args=(ip,port,username,passwd,cmd)) a.start() a.join()
4远程传输文件
scp从本地服务器复制到远程服务器
scplocal_fileremote_username@remote_ip:remote_file
指定了用户名,命令执行后需要输入用户密码;如果不指定用户名,命令执行后需要输入用户名和密码;从远处复制文件到本地
scpremote_username@remote_ip:remote_filelocal_file
5paramiko实现远程传输文件
新建一个SFTPClient对象,该对象复用之前的SSH连接,因此,我们使用sftp传输文件时,不需要再次进行用户认证。实现文件
上传:
sftp=paramiko.SFTPClient.from_transport(ssh.get_transport()) #sftp=ssh.open_sftp()#两者选其一即可 sftp.put('bbb.c','aaa.c')#文件上传并重命名 sftp.close()
或者以下实现文件上传和下载:
importparamiko t=paramiko.Transport((hostname,port)) t.connect(username=username,password=password) sftp=paramiko.SFTPClient.from_transport(t) sftp.put('bbb.c','aaa.c')#文件上传并重命名 sftp.get('m.py','mm.py')#文件下载并重命名 t.close()
官方文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。