zoukankan      html  css  js  c++  java
  • paramiko模块

    paramiko模块

    下载安装

    # pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
      
    # 下载安装 pycrypto
    wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz
    tar -xvf pycrypto-2.6.1.tar.gz
    cd pycrypto-2.6.1
    python setup.py build
    python setup.py install
      
    # 进入python环境,导入Crypto检查是否安装成功
      
    # 下载安装 paramiko
    wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz
    tar -xvf paramiko-1.10.1.tar.gz
    cd paramiko-1.10.1
    python setup.py build
    python setup.py install
      
    # 进入python环境,导入paramiko检查是否安装成功

    使用模块

    1. 基于用户名和密码的 sshclient 方式登录

    import paramiko
     
    # 建立一个sshclient对象
    ssh = paramiko.SSHClient()
    # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 调用connect方法连接服务器
    ssh.connect(hostname='172.16.209.19',port=22,username='root',password='123')
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df -hl')
    # 结果放到stdout中,如果有错误将放到stderr中
    print(stdout.read().decode())
    # 关闭连接
    ssh.close()

    注意:以sshclient方式运行交互式命令需要增加两行

    import paramiko
     
    # 建立一个sshclient对象
    ssh = paramiko.SSHClient()
    # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 调用connect方法连接服务器
    ssh.connect(hostname='172.16.209.119',port=22,username='root',password='123')
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command("passwd lhf")
    # 结果放到stdout中,如果有错误将放到stderr中
    stdin.write('123
    ')
    stdin.flush()
    stdin.write('123
    ')
    stdin.flush()
    print(stderr.read())
    # 关闭连接
    ssh.close()

    2 基于用户名和密码的 transport 方式登录 

    其实paramiko.SSHClient().connect()这个方法的内部实现调用的就是Transport().connect()这个方法。所以可以认为Transport()是paramiko里面创建连接的通用方法。

    import paramiko
     
    # 实例化一个transport对象
    trans = paramiko.Transport(('172.16.209.119', 22))
    # 建立连接
    trans.connect(username='root', password='123')
     
    # 将sshclient的对象的transport指定为以上的trans
    ssh = paramiko.SSHClient()
    ssh._transport = trans
    # 执行命令,和传统方法一样
    stdin, stdout, stderr = ssh.exec_command('df -hl')
    print(stdout.read().decode())
     
    # 关闭连接
    trans.close()

    3.基于公钥密钥的 SSHClient 方式登录

    import paramiko
     
    # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数
    pkey = paramiko.RSAKey.from_private_key_file('D:id_rsa',password='123456')
    # 建立连接
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname='172.16.209.119',
                port=22,
                username='root',
                pkey=pkey)
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df -hl')
    # 结果放到stdout中,如果有错误将放到stderr中
    print(stdout.read().decode())
    # 关闭连接
    ssh.close()

    4 .基于密钥的 Transport 方式登录

    import paramiko
     
    # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数
    pkey = paramiko.RSAKey.from_private_key_file('D:id_rsa', password='123456')
    # 建立连接
    trans = paramiko.Transport(('172.16.209.119', 22))
    trans.connect(username='root', pkey=pkey)
     
    # 将sshclient的对象的transport指定为以上的trans
    ssh = paramiko.SSHClient()
    ssh._transport = trans
     
    # 执行命令,和传统方法一样
    stdin, stdout, stderr = ssh.exec_command('df -hl')
    print(stdout.read().decode())
     
    # 关闭连接
    trans.close()

    传文件 SFTP

    import paramiko
     
    # 实例化一个trans对象# 实例化一个transport对象
    trans = paramiko.Transport(('172.16.209.119', 22))
    # 建立连接
    trans.connect(username='root', password='123')
     
    # 实例化一个 sftp对象,指定连接的通道
    sftp = paramiko.SFTPClient.from_transport(trans)
    # 发送文件
    sftp.put(localpath='D:id_rsa', remotepath='/tmp/id_rsa')
    # 下载文件
    # sftp.get(remotepath, localpath)
    trans.close()
  • 相关阅读:
    #define #undef
    ps
    Find–atime –ctime –mtime的用法与区别总结
    redis
    linux mutex
    private继承
    boost::noncopyable介绍
    Makefile 中:= ?= += =的区别
    linux Tar 命令参数详解
    Ubuntu14.04安装CMake3.0.2
  • 原文地址:https://www.cnblogs.com/freely/p/6407549.html
Copyright © 2011-2022 走看看