python基于paramiko库远程执行SSH命令如何实现sftp下载文件

  介绍

小编给大家分享一下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下载文件