本文摘自php中文网,作者黄舟,侵删。
本篇文章主要介绍了python的paramiko模块实现远程控制和传输示例,非常具有实用价值,需要的朋友可以参考下本文介绍了python的paramiko模块实现远程控制和传输示例,分享给大家,具体如下:
1 安装
1 | sudo pip install paramiko
|
2 ssh实现远程控制
1 2 3 | ssh username@ip
ssh username@ip command
|
ssh运行后,想退出,可以kill掉ssh进程。
3 paramiko实现ssh
1 2 3 4 5 6 7 8 9 10 11 12 | import paramiko
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())
ssh.connect(hostname = hostname,port = port,username = username,password = password)
stdin, stdout, stderr = ssh.exec_command( "ls" )
print (stdout.readlines())
ssh.close()
|
exec_command命令,以分号;分隔表示先后执行两个命令;可以传入多个参数; exec_command为单个会话,执行完成之后会回到登录时的缺省目录,如下:
1 2 3 4 | a = '~/Videos'
b = 'aaa'
ssh.exec_command( 'cd %s;mkdir %s' % (a,b))
ssh.exec_command( 'mkdir aaa' )
|
远端执行命令时如果有交互,可以这样用 stdin.write(“”)来完成。
注意:
(1)sudo后要加-S,表示从stdin接收密码;
(2)stdin.write(‘password\n')最后要加\n作为命令的结束,否则服务器一直等待;
(3) flush()写入的缓冲( flush() any buffer you're writing to )
1 2 3 | stdin, stdout, stderr = ssh.exec_command( 'sudo -S ls' )
stdin.write( 'password\n' )
stdin.flush()
|
可以利用多进程或线程可以批量执行命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import paramiko
import threading
def ssh_cmd(ip,port,username,passwd,cmd):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port,username,passwd)
for m in cmd:
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从本地服务器复制到远程服务器
1 | scp local_file remote_username@remote_ip:remote_file
|
指定了用户名,命令执行后需要输入用户密码;如果不指定用户名,命令执行后需要输入用户名和密码; 从远处复制文件到本地
1 | scp remote_username@remote_ip:remote_file local_file
|
5 paramiko实现远程传输文件
新建一个SFTPClient对象,该对象复用之前的SSH连接,因此,我们使用sftp传输文件时,不需要再次进行用户认证。实现文件
上传:
1 2 3 4 | sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())
sftp.put( 'bbb.c' , 'aaa.c' )
sftp.close()
|
或者以下实现文件上传和下载:
1 2 3 4 5 6 7 | import paramiko
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()
|
官方文档
以上就是python中paramiko模块实现远程控制以及传输的示例的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python怎么看数据类型
Python实现switch/case语句的方法
学习Python可以做什么工作
Python输出语句如何写
Python命令行参数是什么
Python如何初始化列表?
Python中property函数的用法
Python类中怎么定义方法
如何在Python环境下安装selenium+headless chrome
安装Python时没有scripts文件夹如何处理
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » python中paramiko模块实现远程控制以及传输的示例