第三方模块paramiko的使用

简介:   "Paramiko" is a combination of the Esperanto words for "paranoid" and "friend". It's a module for Python 2.

  "Paramiko" is a combination of the Esperanto words for "paranoid" and "friend". It's a module for Python 2.7/3.4+ that implements the SSH2 protocol for secure (encrypted and authenticated) connections to remote machines. Unlike SSL (aka TLS), SSH2 protocol does not require hierarchical certificates signed by a powerful central authority. You may know SSH2 as the protocol that replaced Telnet and rsh for secure access to remote shells, but the protocol also includes the ability to open arbitrary channels to remote services across the encrypted tunnel (this is how SFTP works, for example).

  paramiko是一个远程控制模块,使用它可以很容易的再python中使用SSH执行命令和使用SFTP上传或下载文件;而且paramiko直接与远程系统交互,无需编写服务端。

 

  例一(实现一个简单的SSH客户端):

 1 import paramiko
 2 
 3 #实例化一个ssh客户端实例
 4 ssh = paramiko.SSHClient()
 5 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 6 #连接远程 --- 填入要连接的地址,端口,用户,密码
 7 ssh.connect(hostname="192.168.56.50", port=22, username='libin', password='123456')
 8 
 9 while True:
10     command = input(">>>:")
11 
12     #exec_command()返回三个值:the stdin, stdout, and stderr of the executing command, as a 3-tuple
13     stdin, stdout, stderr = ssh.exec_command(command)
14 
15     result = stdout.read()
16     error = stderr.read()
17 
18     if result:
19         print(result.decode())
20     else:
21         print(error.decode())
22 #关闭连接
23 ssh.close()
ssh_client

  例二(实现文件的上传和下载操作):

 1 import paramiko
 2 
 3 transport = paramiko.Transport('192.168.56.50', 22)
 4 transport.connect(username='libin', password='123456')
 5 #实例化一个SFTP客户端实例
 6 sftp = paramiko.SFTPClient.from_transport(transport)
 7 
 8 #put('localpath', 'remotepath')上传本地文件至服务器
 9 #sftp.put(r'E:\tempdownload\Sau_Authentication_Client_For_Windows_V6.82.exe', '/tmp/abc.exe')
10 #get('remotepath', 'localpath')将远程文件下载至本地
11 sftp.get('/tmp/abc.exe', r'E:\tempdownload\abc.exe')
12 
13 transport.close()
sftp_client

   为了连接安全,我们可以对上述两例稍加改变,使其使用密钥认证建立连接。

  例四(以密钥认证实现SSH):

 1 import paramiko
 2 
 3 #实例化一个ssh客户端实例
 4 ssh = paramiko.SSHClient()
 5 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 6 #连接远程 --- 填入要连接的地址,端口,用户,密码
 7 
 8 #导入私钥文件
 9 private_key = paramiko.RSAKey.from_private_key_file('id_rsa_2048')
10 #连接远程
11 ssh.connect(hostname="192.168.56.50", port=22, username='libin', pkey=private_key) #无需再填入用户密码
12 
13 while True:
14     command = input(">>>:")
15 
16     #exec_command()返回三个值:the stdin, stdout, and stderr of the executing command, as a 3-tuple
17     stdin, stdout, stderr = ssh.exec_command(command)
18 
19     result = stdout.read()
20     error = stderr.read()
21 
22     if result:
23         print(result.decode())
24     else:
25         print(error.decode())
26 #关闭连接
27 ssh.close()
key_ssh_client

  例五(以密钥认证实现SFTP):

 1 import paramiko
 2 
 3 transport = paramiko.Transport('192.168.56.50', 22)
 4 #导入私钥文件
 5 privat_key = paramiko.RSAKey.from_private_key_file('id_rsa_2048')
 6 transport.connect(username='libin', pkey=privat_key)
 7 #实例化一个SFTP客户端实例
 8 sftp = paramiko.SFTPClient.from_transport(transport)
 9 
10 #put('localpath', 'remotepath')上传本地文件至服务器
11 sftp.put(r'E:\tempdownload\test.exe', '/tmp/123.exe')
12 
13 # # get('remotepath', 'localpath')将远程文件下载至本地
14 # sftp.get('/tmp/abc.exe', r'E:\tempdownload\abc.exe')
15 transport.close()
key_sftp_client

 

目录
相关文章
|
存储 编译器
当调用一个C函数,在内存上发生了什么?
在这个过程中,内存的分配和释放主要发生在调用栈上,包括局部变量和函数调用的参数。这样的设计使得函数调用可以嵌套,每次调用都有自己的局部环境。
159 0
|
存储 程序员 开发者
深入理解汇编:push、pop、add、sub、lea 指令详解
深入理解汇编:push、pop、add、sub、lea 指令详解
1672 1
|
缓存 数据库 NoSQL
【后端面经】【缓存】33|缓存模式:缓存模式能不能解决缓存一致性问题?-02 Write Through + Write Back
【5月更文挑战第10天】`Write Through`是一种缓存策略,写操作仅需写入缓存,缓存负责更新数据库。异步版本可能丢失数据,而同步变种先写数据库再异步刷新缓存,减少丢数据风险。`Write Back`模式数据先写入缓存,过期时才写入数据库,可能导致数据丢失,但若使用Redis并确保高可用,可部分解决一致性问题。在特定条件下,如使用SETNX命令,能缓解一致性挑战。
250 0
【后端面经】【缓存】33|缓存模式:缓存模式能不能解决缓存一致性问题?-02 Write Through + Write Back
|
Java Spring 数据库
怎样动动手指就能实现数据操作?Spring Data JPA背后的魔法揭秘
【8月更文挑战第31天】在Java开发中,数据库交互至关重要。传统的JDBC操作繁琐且难维护,而Spring Data JPA作为集成JPA的数据访问层解决方案,提供了CRUD等通用操作接口,显著减少代码量。通过继承`JpaRepository`,开发者能轻松实现数据的增删改查,甚至复杂查询和分页也不再困难。本文将通过示例详细介绍如何利用Spring Data JPA简化数据访问层的开发,提升代码质量和可维护性。
135 0
|
安全 算法 Linux
SSH协议的原理和使用:深入剖析SSH协议的原理和使用方法
SSH协议的原理和使用:深入剖析SSH协议的原理和使用方法
3694 0
详解Python正则表达式中group与groups的用法
在Python中,正则表达式的group和groups方法是非常有用的函数,用于处理匹配结果的分组信息。 group方法是re.MatchObject类中的一个函数,用于返回匹配对象的整个匹配结果或特定的分组匹配结果。而groups方法同样是re.MatchObject类中的函数,它返回的是所有分组匹配结果组成的元组。在本文中,我们将详细讲解group和groups的用法和使用场景。
|
机器学习/深度学习 传感器 人工智能
纯视觉3D检测综述!一文详解3D检测现状、趋势和未来方向!(下)
基于图像的3D目标检测是自动驾驶领域的一个基本问题,也是一个具有挑战性的问题,近年来受到了业界和学术界越来越多的关注。得益于深度学习技术的快速发展,基于图像的3D检测取得了显著的进展。特别是,从2015年到2021年,已经有超过200篇研究这个问题的著作,涵盖了广泛的理论、算法和应用。然而,到目前为止,还没有一个调查来收集和组织这方面的知识。本文首次对这一新兴的不断发展的研究领域进行了全面综述,总结了基于图像的3D检测最常用的流程,并对其各个组成部分进行了深入分析。此外,作者还提出了两个新的分类法,将最先进的方法组织成不同的类别,以期提供更多的现有方法的系统综述,并促进与未来作品的公平比较。
纯视觉3D检测综述!一文详解3D检测现状、趋势和未来方向!(下)
|
存储 JavaScript Linux
运维笔记:关于使用vitepress 制作静态站点并托管到gitee
本文总环关于使用vitepress 制作静态站点并托管到gitee
1340 0
|
存储 XML 消息中间件
一文彻底搞懂序列化和反序列化
一文彻底搞懂序列化和反序列化
|
Java
这几个常用的工具类,让你生产力爆表!
这几个常用的工具类,让你生产力爆表!
182 0