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()
  • 相关阅读:
    Truck History(poj 1789)
    Highways poj 2485
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    115. Distinct Subsequences
    114. Flatten Binary Tree to Linked List
    113. Path Sum II
    109. Convert Sorted List to Binary Search Tree
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7050461.html
Copyright © 2011-2022 走看看