• Python模块之Paramiko


    Paramiko简介

    Paramiko它是Python 2.7 / 3.4+ 的一个模块,它实现了SSH2协议,用于与远程机器的安全(加密和认证)连接。与SSL不同,SSH2不需要强大的中央权威机构签署的分层证书。SSH2协议是替换Telnet和rsh以便更安全的访问远程shell的协议 ,但该协议还包括通过加密隧道向远程服务器打开任意通道的功能(例如:SFTP的工作方式)。

    项目主页:http://www.paramiko.org/

    Github:https://github.com/paramiko/paramiko

    ssh基本原理与特点

    SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。

    ssh另一项优点就是对传输的数据进行加密,可以加快传输速度,SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。

    ssh使用

    使用ssh登陆到服务器

    不指定用户

    ssh 192.168.0.11

    指定用户

    ssh -l root 192.168.0.11

    ssh root@192.168.0.11

    指定端口、用户

    ssh -p 12333 root@216.230.230.114

    Paramiko的安装

    pip install paramiko
    
    virtualenv
    source venv/bin/activate
    pip install paramiko

    Paramiko远程执行Linux命令

    基于用户名密码方式连接:

    import paramiko
       
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='192.168.1.1', port=22, username='weiheng', password='weiheng123')
       
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('ls')
    # 获取命令结果
    result = stdout.read()
       
    # 关闭连接
    ssh.close()

    基于公钥密钥方式连接:

    import paramiko
      
    private_key = paramiko.RSAKey.from_private_key_file('/home/.ssh/id_rsa')
      
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='192.168.1.1', port=22, username='weiheng', key=private_key)
      
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('ls')
    # 获取命令结果
    result = stdout.read()
      
    # 关闭连接
    ssh.close()

    Paramiko远程上传和下载文件

    paramiko远程上传和下载

    import paramiko
      
    transport = paramiko.Transport(('192.168.1.1',22))
    transport.connect(username='weiheng',password='weiheng123')
      
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # 将HelloWorld.py 上传至服务器 /tmp/1.py
    sftp.put('/tmp/HelloWorld.py', '/tmp/1.py')
    
    # 将1.py 下载到本地 HelloWorld
    sftp.get('/tmp/1.py', '/tmp/HelloWorld')
      
    transport.close()

    使用SSHClient封装Transport

    我们可能会遇到  需要传输文件,有需要执行Linux命令的情况,  因为Transport对象只能传输文件,不能执行Linux命令,所以我们只需要创建一个SSHClient,然后通过SSHClient的 get_transport() 来创建Transport对象

    import paramiko
       
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='192.168.1.1', port=22, username='weiheng', password='weiheng123')
     
    # 获取Transport对象
    trans_obj = ssh_client.get_transport()
    
    sftp_obj = paramiko.SFTPClient.from_transport(trans_obj)
    sftp_obj.get_channel()
    # 使用sftp_obj上传和下载文件
    sftp_obj.put('source','target')
    sftp_obj.get('source','target')
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('ls')
    # 获取命令结果
    result = stdout.read()
       
    # 关闭连接
    ssh.close()
  • 相关阅读:
    VIE模式和IP
    背景色改为豆绿色
    Semantic Logging
    mysql 安装配置相关
    高德API相关
    vmware workstation 虚拟机安装vwmare tools
    sql server2012光盘中有management studio,安装时选择客户端。
    zz微软企业库
    zz flag attribute for enum
    zz 还要用存储过程吗
  • 原文地址:https://www.cnblogs.com/weihengblog/p/9687298.html
Copyright © 2020-2023  润新知