zoukankan      html  css  js  c++  java
  • python网络编程-paramiko

    python基础学习日志day8-paramiko

    一:简介

      Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作

      现有这样的需求:需要使用windows客户端,远程连接到Linux服务器,查看上面的日志状态,大家通常使用的方法会是:

      1:用telnet

      2:用PUTTY

      3:用WinSCP

      4:用XManager等…

      那现在如果需求又增加一条,要从服务器上下载文件,该怎么办?那常用的办法可能会是:

      1:Linux上安装FTP并配置

      2:Linux上安装Sambe并配置…

      大家会发现,常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,

      如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了。

      使用paramiko可以很好的解决以上问题

     

    二:paramiko使用

      1)SSHClient于连接远程服务器并执行基本命令

        基于用户名密码连接:

        

    # -*- coding:utf-8 -*-
    __author__ = 'shisanjun'
    
    import paramiko
    
    #创建SSH对象
    ssh=paramiko.SSHClient()
    #允许连接不在know_host文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
    #连接服务器
    ssh.connect(hostname="192.168.0.131",port=22,username="root",password="redhat")
    #执行命令
    stdin,stdout,stderr=ssh.exec_command("df -h")
    #获取命令结果
    result=stdout.read()
    print(result.decode())
    print(stderr.read().decode())
    #关闭连接
    ssh.close()

      

      SSHClient封装Transport 

    # -*- coding:utf-8 -*-
    __author__ = 'shisanjun'
    import paramiko
    #创建Transport对象
    transport=paramiko.Transport(("192.168.0.131",22))
    
    transport.connect(username="root",password="redhat")
    #创建SSH对象
    ssh=paramiko.SSHClient()
    
    ssh._transport=transport
    #执行命令
    stdin,stdout,stderr=ssh.exec_command("df -h")
    
    print(stdout.read().decode())
    #关闭连接
    transport.close()

      基于公钥密钥连接:

      

    # -*- coding:utf-8 -*-
    __author__ = 'shisanjun'
    import paramiko
    
    private_key=paramiko.RSAKey.from_private_key_file("id_rsa")
    #创建SSH对象
    ssh=paramiko.SSHClient()
    #允许连接不在Know_hosts主件中的主要
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
    #连接服务器
    ssh.connect(hostname="192.168.0.131",port=22,pkey=private_key)
    #执行命令
    stdin,stdout,stderr=ssh.exec_command("df -h")
    
    print(stdout.read().decode())
    #关闭连接
    ssh.close()

      

    # -*- coding:utf-8 -*-
    __author__ = 'shisanjun'
    import paramiko
    
    private_key=paramiko.RSAKey.from_private_key_file("id_rsa")
    transport=paramiko.Transport(("192.168.0.131",22))
    transport.connect(username="root",pkey=private_key)
    #创建SSH对象
    ssh=paramiko.SSHClient()
    ssh._transport=transport
    #执行命令
    stdin,stdout,stderr=ssh.exec_command("df -h")
    
    print(stdout.read().decode())
    #关闭连接
    ssh.close()

    SFTPClient

    用于连接远程服务器并执行上传下载

      基于用户名密码上传下载

      

    # -*- coding:utf-8 -*-
    __author__ = 'shisanjun'
    import paramiko
    
    trasport=paramiko.Transport(("192.168.0.131",22))
    trasport.connect(username="root",password="redhat")
    
    sftp=paramiko.SFTPClient.from_transport(trasport)
    #id_rsa 上传至服务器 /tmp/id_rsa,
    sftp.put("id_rsa","/tmp/id_rsa")#远程必须批定文件名,否则报错
    #将remove_path 下载到本地 local_path
    sftp.get("/tmp/id_rsa","id_rsa1")
    
    trasport.close()

      基于公钥密钥上传下载

    import paramiko
     
    private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
     
    transport = paramiko.Transport(('hostname', 22))
    transport.connect(username='wupeiqi', pkey=private_key )
     
    sftp = paramiko.SFTPClient.from_transport(transport)
    # 将location.py 上传至服务器 /tmp/test.py
    sftp.put('/tmp/location.py', '/tmp/test.py')
    # 将remove_path 下载到本地 local_path
    sftp.get('remove_path', 'local_path')
     
    transport.close()
  • 相关阅读:
    oracle多表关联删除的两种方法
    T100——汇总错误消息显示
    T100——程序从标准签出客制后注意r.c和r.l
    本地DataGrip连接阿里云MySQL
    mysql for mac 上的安装及用DataGrip连接
    mac 上安装vue模版-D2 Admin
    Python 3.7版本关于json.dump失效
    设置第三方的SMTP服务
    Apache 配置代理服务
    PyCharm 通过Github和Git上管理代码
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7050461.html
Copyright © 2011-2022 走看看