zoukankan      html  css  js  c++  java
  • paramiko简介

    一、什么是paramiko

      要想明白什么是paramiko,要先明白ssh协议。

    二、什么是ssh协议

      ssh全称是Secure Shell (翻译:安全的外壳),根据字面意思就可以知道是和安全相关的协议,官方说法是IETF制定的在应用层基础上的安全网络协议。  专门为了远程登录会话提供的安全协议。由于ssh传输数据都是压缩过的,所以在传输速度上会加快,目前ssh协议已经成为linux系统的标准配置。(具体的ssh协议的安全机制和实现原理请各位小伙伴们自行百度)

    三、paramiko介绍

      看完第二部分小伙伴们应该已经明白了什么是ssh,而paramiko是python的一个库,使用paramiko我们可以直接使用Python代码对远程服务器进行操作(不用面对冰冷的命令窗口,就是舒服),这样就不用直接使用ssh命令操作!!!

    四、paramiko核心组件介绍

      1. SSHClient:  主要是用于执行远程命令

      2. SFTPClient: 作用类似于linux的sftp命令,用来实现远程操作文件,对文件上传、下载和修改文件权限

    五、SSHClient 的介绍

      1. 常用的方法有以下几种:connect():主要是用于实现和远程服务器的连接与认证

      需要的参数如下:

      

     def connect(
            self,
            hostname,
            port=SSH_PORT,
            username=None,
            password=None,
            pkey=None,
            key_filename=None,
            timeout=None,
            allow_agent=True,
            look_for_keys=True,
            compress=False,
            sock=None,
            gss_auth=False,
            gss_kex=False,
            gss_deleg_creds=True,
            gss_host=None,
            banner_timeout=None,
            auth_timeout=None,
            gss_trust_dns=True,
            passphrase=None,
            disabled_algorithms=None,
        ):

      从源码种可以看出 hostname是必须要填写的参数,用来指定要连接的主机,port 是要连接的端口,一般默认为22,username为用户名,password为密码,pkey则是私钥方式去验证身份,key_filename则是指定私钥文件地址。主要的是这几个参数。

      2. set_missing_host_key_policy():设置远程服务器没有在know_hosts文件中记录时的应对策略。策略目前有三种

      AutoAddPolicy 自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认

      WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接
      RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项
      3. exec_command() : 用于远程执行命令
      4.open_sftp() :  在当前ssh会话基础上创建一个sftp会话。会返回一个sftpclient对象
    六、sshclient的用法举例:
     
    import paramiko
    # 第一步实例化 SSHClient,获取对象 client
    =paramiko.SSHClient()
    # 设置自动添加策略,不添加的话如果不在本地know_hosts文件记录的主机则无法连接 client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接远程主机, client.connect(hostname
    ='你要连接的ip', port=22, username='你的用户名', password='你的用户密码')
    # 建立通道并执行命令 stdout 为正确的输出 stderr为错误的输出 stdin,stdout,stderr=client.exec_command(
    'df -h')

    client.close()

    2. 密钥连接方式

      

    # 获取密钥位置
    private=paramiko.RSAKey.from_private_key_file('/Users/ch/.ssh/id_rsa') #实例化SSHClient client = paramiko.SSHClient() #自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接SSH服务端,以用户名和密码进行认证 client.connect(hostname='10.0.0.1',port=22,username='root',pkey=private)

    七 、SFTPClient 常用方法的介绍

      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() 列出服务器目录下的文件
    用法举例:
     
    import paramiko
     
    # 获取Transport实例
    tran = paramiko.Transport(('10.0.0.3', 22))
     
    # 连接SSH服务端,使用password
    tran.connect(username="root", password='123456')
    # 或使用
    # 配置私人密钥文件位置
    private = paramiko.RSAKey.from_private_key_file('/Users/root/.ssh/id_rsa')
    # 连接SSH服务端,使用pkey指定私钥
    tran.connect(username="root", pkey=private)
     
    # 获取SFTP实例
    sftp = paramiko.SFTPClient.from_transport(tran)
     
    # 设置上传的本地/远程文件路径
    localpath = "/Users/root/Downloads/1.txt"
    remotepath = "/tmp/1.txt"
     
    # 执行上传动作
    sftp.put(localpath, remotepath)
    # 执行下载动作
    sftp.get(remotepath, localpath)
     
    tran.close()

    文章参考:https://www.cnblogs.com/xiao-apple36/p/9144092.html#_label2_2

    欢迎大家进入QQ群讨论关于Python的问题:515458373

  • 相关阅读:
    springboot2 pagehelper 使用笔记
    springboot2 config_toolkit 并且设置全局获取数据GlobalUtil
    springboot2 redis
    Python问题汇总
    MAC安装Win10系统安装相关问题
    DEDE开发网站总部
    DEDE 调用文章中略缩图的原图
    塑形动作
    dede初学
    打印机维护经验
  • 原文地址:https://www.cnblogs.com/qiujichu/p/12048763.html
Copyright © 2011-2022 走看看