执行远程命令(Paramiko)

来自CloudWiki
跳转至: 导航搜索

Paramiko简介

ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography)。

有了Paramiko以后,我们就可以在Python代码中直接使用SSH协议对远程服务器执行操作,而不是通过ssh命令对远程服务器进行操作。

Paramiko是一个SSHv2协议的Python实现,提供客户端和服务器的功能。虽然它利用了Python C扩展来实现低级别加密(密码学),但Paramiko本身就是一个纯Python接口,使用Paramiko可以方便地通过SSH协议执行远程主机的程序或脚本,获取输出结果和返回值。

优点

虽然我们可以使用expect或SSH授信来达到相应的执行远程主机的效果,但Paramiko则不需要额外的配置,使用起来更加简洁优雅,而且在运维中的调度平台将会非常实用。假如有一个调度工具想调度远程主机的程序或脚本,却又不想在远程主机上部署调度工具的agent,就可以通过Paramiko来封装命令,以达到远程调度的效果。

应用范围

由于Paramiko是使用纯Python实现的,所以所有Python支持的平台,如Linux、Solaris、BSD、MacOS X、Windows等,Paramiko都可以支持。如果需要使用SSH从一个平台连接到另外一个平台进行一系列的操作时,paramiko是最佳工具之一。


几个重要的类

paramiko包含两个核心组件:SSHClient和SFTPClient。

SSHClient

SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。

SFTPClient

SFTPClient的作用类似与Linux的sftp命令,是对SFTP客户端的封装,用以实现远程文件操作,如文件上传、下载、修改文件权限等操作。

Paramiko中的几个基础名词:

1、Channel:是一种类Socket,一种安全的SSH传输通道;

2、Transport:是一种加密的会话,使用时会同步创建了一个加密的Tunnels(通道),这个Tunnels叫做Channel;

3、Session:是client与Server保持连接的对象,用connect()/start_client()/start_server()开始会话。

SecureRT: https://baike.baidu.com/item/securecrt/8900957?fr=aladdin

SecureTX: https://baike.baidu.com/item/securefx/8609905?fr=aladdin


通道(Channel)类

通道(Channel)类是对SSH2 Channel的抽象类,是跨SSH传输的安全隧道。隧道的作用类似于套接字,并且与Python套接字API十分类似。因为SSHv2协议有一种流动窗口控制机制,如果停止从一个通道读取数据,并且这个通道的缓冲区已满,那么服务器将不会往此通道发送任何数据,但是这并不会影响同一传输上的其他通道(单个传输上的所有通道都是独立的流量控制通道)。类似地,如果服务器没有读取客户端发送的数据,那么客户端的发送调用可能会阻塞,除非设置了超时,这与正常的网络套接字完全一致。通道Channel类的实例常用于上下文管理。

传输(Transport)类

传输(Transport)类是核心协议的实现类,SSH传输连接到流(通常是套接字),协商加密的会话,进行身份验证,然后在会话之间创建流隧道(称为通道)。多个通道可以跨单个会话进行多路复用。

SSHClient类

SSHClient类使用SSH服务器的会话高级表示形式。这个类将传输类、通道类和SFTPClient包装起来,以处理验证和打开通道。