小编给大家分享一下python基于paramiko库远程执行SSH命令如何实现sftp下载文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
楔子
我们使用python避免不了和Linux打交道,而有时我们需要执行一些壳命令。如果在本地的话,那么可以通过调用操作系统。系统或者子流程。Popen来执行,但如果我们希望远程执行其它机器上的shell命令,这个时候该怎么做呢?下面我们就来推荐一个第三方库paramiko,看看如何使用Python远程操作其它机器。
paramiko
网络传输是遵循协议的,比如SSH, paramiko则是实现了SSHv2协议的一个Python第三方库(底层使用的是加密)。有了paramiko之后,我们便可以通过Python使用SSH协议来连接远程服务器执行操作,和xshell本质上是类似的。
注意:我们在Python代码中是直接通过SSH协议对远程服务器执行操作,而不是调用SSH命令对远程服务器进行操作。
引用>既然要使用,那么首先要安装,直接pip安装paramiko即可。
paramiko包含两大核心组件:SSHClient和SFTPClient
SSHClient的作用类似于Linux下的SSH命令,是对SSH会话的封装,通常用于执行远程命令。
SFTPClient的作用类似于Linux下的sftp命令,是对sftp客户端的封装,用于实现远程文件的操作,比如:文件上,传下载,修改文件权限等操作。
引用>下面我们就来介绍它们的用法。
SSHClient的使用
首先创建一个客户端实例,客户=paramiko.SSHClient(),然后这个客户下有很多方法。
连接:实现远程服务器的连接与认证
def 连接( ,自我, 主机名, ,=SSH_PORT港 ,用户名=没有 ,密码=没有 ,pkey=没有 ,key_filename=没有 ,超时=没有 allow_agent=True, look_for_keys=True, ,压缩=False, ,袜子=没有 gss_auth=False, gss_kex=False, gss_deleg_creds=True, ,gss_host=没有 ,banner_timeout=没有 ,auth_timeout=没有 gss_trust_dns=True, ,密码=没有 ,disabled_algorithms=没有 ): ,““““““里面参数很多,但常用的参数如下:
<李>
主机名:连接的目的主机,这个参数是必须的
李> <李>=SSH_PORT港:指定的端口,默认是22日
李> <李>用户名=没有:登陆的用户
李> <李>密码=没有:用户密码
李> <李>pkey=没有:通过私钥进行身份验证
李> <李>key_filename=没有:一个文件名或文件列表,指定私钥文件
李> <李>超时=没有:可选的tcp连接超时时间
李> <李>allow_agent=True:是否允许连接到ssh代理,默认为真正的
李> <李>look_for_keys=True:是否在~/sh中搜索私钥文件,默认为真的,表示允许
李> <李>压缩=False:是否打开压缩
李>
set_missing_host_key_policy:当远程服务器没有本地秘钥或主对象时的应对策略,目前支持三种:
<李>
AutoAddPolicy:自动添加主机名以及主机秘钥到本地HostKeys对象,不依赖load_system_host_key的配置,即新建立ssh连接时不需要再输入是的或不进行确认
李> <李>WarningPolicy:用于记录一个未知的主机秘钥的Python警告,并且接收;所以它的功能和AutoAddPolicy是类似的,只不过会提示这是新连接
李> <李>RejectPolicy:自动拒绝未知的主机名和秘钥,依赖load_system_host_key的配置,该选项为默认选项
李>所以我们一般都会将策略改成AutoAddPolicy,不然还需要在本地进行配置。
引用>exec_command:远程执行的具体Linux命令
open_sftp:在当前ssh会话的基础上创建一个sftp会话,该方法会返回一个SFTPClient对象,可以执行文件的上,传下载等操作。我们后面在SFTPClient的时候会说。
下面我们来演示一下:
import paramiko #,实例化SSHClient 时间=client paramiko.SSHClient () #,自动添加策略,,保存服务器的主机名和密钥信息;,如果不添加,,那么不再本地,know_hosts 文件中的主机将无法连接 client.set_missing_host_key_policy (paramiko.AutoAddPolicy ()) #,连接,SSH 服务端,,通过用户名和密码进行认证 #,该过程会创建一个,,,它是,client 和,server 保持连接的对象 client.connect(主机名=& # 39;47.94.174.89& # 39;,,端口=22日,用户名=& # 39;根# 39;,,密码=& # 39;xxxxxxx # 39;) #,执行远程命令,,该方法会打开一个,paramiko.Channel 对象(类,插座,,一种安全的,SSH 传输通道) #,会返回三个值,,分别是,stdin(标准输入),stdout(标准输出),stderr(错误输出) 将stdin、stdout,祝福;stderr =, client.exec_command (“ls /? #,打印执行结果,,显然我们要通过,stdout 来查,看,我们可以调用,stdout.read 获取执行的结果 #,但是返回的是字节,,所以需要先获取对应的编码,,然后再进行,解码 打印(stdout.read () .decode (“utf-8")) “““ 箱子 引导 dev 等 家 自由 lib64 发现了+ 媒体 mnt 选择 proc 根 运行 sbin子 深水救生艇 sys tmp usr var “““ #,最后关闭,SSHClient 对象 client.close ()python基于paramiko库远程执行SSH命令如何实现sftp下载文件