Python中paramiko远程window,paramiko.ssh_exception

  Python中paramiko远程window,paramiko.ssh_exception

  Paramiko实现了SSHv2协议(底层使用密码学),用于连接远程服务器,执行相关操作。该模块可用于在远程服务器上执行命令或文件操作。今天,本文将介绍Paramiko,这是一个Python远程SSH库。有兴趣的朋友来看看吧。

  00-1010 SSHClient的常用方法,核心组件,SFTPClient,常用方法:用示例SSH私钥创建SSH client,运行命令SFTPClient,下载文件paramiko是用python语言编写的模块,遵循SSH2协议,支持通过加密和认证连接远程服务器。Paramiko支持Linux、Solaris、BSD、Mac OS X、Windows等平台通过SSH从一个平台连接到另一个平台。使用该模块,可以方便地进行ssh连接和sftp文件传输。

  parao(https://www.paramiko.org/)实现了SSHv2协议(底层使用加密技术),用于连接远程服务器并执行相关操作。该模块可用于在远程服务器上执行命令或文件操作。

  

目录

  如果没有,请先安装pip install paramiko。

  Paramiko包含两个核心组件,SSHClient和SFTPClient:

  SshClient:类似于Linux的SSH命令,封装了SSH会话;该类封装了SFTPClient建立的传输、通道和方法(open_sftp),通常用于执行远程命令。SftpClient:类似于Linux的SFTP命令,封装了SFTP客户端,用于实现远程文件操作,如文件上传、下载、修改文件权限等。涉及几个基本名词:

  通道:一个类似套接字的安全SSH传输通道;传输:它是加密的会话,并且是加密的信道);使用时将同步创建;会话:它是保持客户机和服务器之间连接的对象。使用connect()/start _ client()/start _ server()启动会话。

  

核心组件

  SSHClient用于执行ssh命令。

  connect():实现远程服务器的连接和认证,只有主机名是必需的参数。

  hostname:port=ssh _ port:ssh port username=None:登录用户名password=None:用户密码pkey=None:使用私钥(而不是密码)进行身份验证key_filename=None:文件名或文件列表,指定私钥文件超时=None:可选tcp连接超时allow_agent=True:是否允许连接到ssh代理,默认值为True: allow look_for_keys=True:是否在~/中搜索私钥文件。ssh,默认值为True: allow compress=False:是否开启压缩set_missing_host_key_policy():设置远程服务器未记录在know_hosts文件中时的响应策略。

  AutoAddPolicy:自动将主机名和密钥添加到本地HostKeys对象中,即新建立ssh连接时不需要输入yes或no进行确认;WarningPolicy:当记录了未知的主机密钥时,将发送该消息。

  出警告,功能上和AutoAddPolicy类似,但是会提示是新连接;

  • RejectPolicy默认选项;自动拒绝未知的主机(本地know_hosts中不存在的)。
  •   exec_command():在远程服务器执行Linux命令的方法。

      open_sftp():在当前ssh会话的基础上创建一个sftp会话,并返回一个SFTPClient对象

      

    sftp = sshClient.open_sftp()

      

      

      

    SFTPClient常用方法

      SFTPCLient作为一个sftp的客户端对象,实现远程文件操作,如上传、下载,查询权限、状态等:

      

    • from_transport(cls,t):创建一个已连通的SFTP客户端通道
    • put(localpath, remotepath, callback=None, confirm=True):将本地文件上传到服务器 参数confirm:是否调用stat()方法检查文件状态,返回ls -l的结果
    • get(remotepath, localpath, callback=None):从服务器下载文件到本地
    • mkdir():在服务器上创建目录
    • remove():在服务器上删除目录
    • rename():在服务器上重命名目录
    • stat():查看服务器文件状态
    • listdir():列出服务器目录下的文件

      

      

    使用示例

      

      

    SSH私钥创建

      要通过私钥登录,需要先生成私钥(以Windows远程登录Linux为例):

      

    • 生成私钥:

      打开cmd,执行ssh-keygen

      全部回车;

      会在‘用户’目录下的.ssh目录下生成id_rsa与id_rsa.pub文件

      

    • 上传公钥:

      复制id_rsa.pub到远端Linux机器的~/.ssh下;

      把公钥加入authorized_keys中:cat id_rsa.pub >> authorized_keys

      

      

    SSHClient运行命令

      以私钥方式登录

      

    def execCmd(host, user, psw, cmd, port=22) -> (str, str):

       """

       :param host:

       :param user:

       :param psw:

       :param cmd:

       :param port:

       :return: (stdout string, stderr string)

       """

       with paramiko.SSHClient() as ssh_client:

       # 自动添加策略,保存服务器的主机名和密钥信息,须放在connect方法的前面

       ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

       # 连接SSH服务端,以用户名和密码进行认证

       # ssh_client.connect(hostname=host, port=port, username=user, password=psw)

       # 连接SSH服务端,以用户名和私钥进行认证

       prvKey = paramiko.RSAKey.from_private_key_file(psw)

       ssh_client.connect(hostname=host, port=port, username=user, pkey=prvKey)

       # 打开一个Channel并执行命令: 正确输出放到stdout中,如果有错误放到stderr中

       _, stdout, stderr = ssh_client.exec_command(cmd)

       result = stdout.read().decode(utf-8)

       # print("[OUT]:", result)

       err = stderr.read().decode(utf-8)

       # print("[ERR]:", err)

       ssh_client.close()

       return result, err

      以元组方式返回,若有错误则返回的err非空。

      

      

    SFTPClient下载文件

      以用户名与密码方式登录:

      

    def downloadFile(host, user, psw, localFile, remoteFile, port=22):

       # 实例化一个transport对象

       with paramiko.Transport((host, port)) as tran:

       # 连接SSH服务端,,以用户名和密码进行认证

       tran.connect(username=user, password=psw)

       # 连接SSH服务端,以用户名和私钥进行认证

       # prvKey = paramiko.RSAKey.from_private_key_file(psw)

       # tran.connect(username=user, pkey=prvKey)

       # 获取SFTP实例

       sftp = paramiko.SFTPClient.from_transport(tran)

       # 执行下载动作

       sftp.get(remoteFile, localFile)

       # 关闭Transport通道

       tran.close()

      

      默认远端当前目录是用户home目录,如下载".viminfo"文件:

      

    downloadFile(host, user, psw, "d:\\tmp.conf", ".viminfo")

      到此这篇关于Python远程SSH库Paramiko简介的文章就介绍到这了,更多相关Python远程Paramiko内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

    郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

    留言与评论(共有 条评论)
       
    验证码: