python中paramiko模块实现远程控制以及传输的示例


本文摘自php中文网,作者黄舟,侵删。

本篇文章主要介绍了python的paramiko模块实现远程控制和传输示例,非常具有实用价值,需要的朋友可以参考下

本文介绍了python的paramiko模块实现远程控制和传输示例,分享给大家,具体如下:

1 安装


1

sudo pip install paramiko

2 ssh实现远程控制


1

2

3

#LINUX下执行shell

ssh username@ip #输入密码后就可以对远程机器进行操作

ssh username@ip command #输入密码后远程机器就执行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()) #允许连接不在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为单个会话,执行完成之后会回到登录时的缺省目录,如下:


1

2

3

4

a='~/Videos'

b='aaa'

ssh.exec_command('cd %s;mkdir %s'%(a,b)) #aaa在a目录下

ssh.exec_command('mkdir aaa') #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 = ssh.open_sftp() #两者选其一即可

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》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...