• 堡垒机初识--paramiko模块


    一、paramiko模块

      Python的paramiko模块基于SSH用于连接远程服务器并执行相关的操作。

      1.1 在windows上安装paramiko模块

      测试环境: win10 , python3.5 并且已安装 pip

      在命令窗口,切换到 python 安装目录中的 Scripts

      执行: pip install paramiko

      检测: import paramiko 

    二、SSHClient

      2.1 基于用户名密码连接  

    import paramiko
    
    '''
       用于连接远程服务器,并执行命令
    '''
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # 连接服务器
    ssh.connect(hostname='172.16.200.30', port=22, username='root', password='111111')
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('ls&&df')
    
    # 获取命令结果
    # 三元运算
    res, err = stdout.read(), stderr.read()
    result = res if res else err
    print(result.decode())
    
    # 关闭连接
    ssh.close()
    

      输出

       

    1. stdin =>  标准输入,就是你输入的那个命令
    2. stdout => 标准输出,你输入命令后执行的结果
    3. stderr => 标准错误,名利执行的过程中,如果出错了,就把这个错误打到这里

       2.2 基于公钥秘钥连接

              其实很上面用密码登入没什么区别,只是不用写明文密码了

    import paramiko
    
    private_key = paramiko.RSAKey.from_private_key_file(r'G:pythonuntitledstudy9ceshi')
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # 连接服务器
    ssh.connect(hostname='172.16.200.30', port=22, username='root', pkey=private_key)
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('ls')
    
    # 获取命令结果
    # 三元运算
    res, err = stdout.read(), stderr.read()
    result = res if res else err
    print(result.decode())
    
    # 关闭连接
    ssh.close()
    

      输出

    004776
    1
    _1748
    anaconda-ks.cfg
    monitor
    npm-debug.log
    

      2.3 SSHClietn封装了transport

    # -*- coding: UTF-8 -*-
    
    # SSHClient 封装了Transport
    
    import paramiko
    
    transport = paramiko.Transport(('172.16.200.30', 22))
    transport.connect(username='root', password='111111')
    
    ssh = paramiko.SSHClient()
    ssh._transport = transport
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('df')
    
    res, err = stdout.read(), stderr.read()
    result = res if res else err
    print(result.decode())
    
    transport.close()
    

      基于秘钥

    # SSHClient 封装了Transport
    
    import paramiko
    
    private_key = paramiko.RSAKey.from_private_key_file(r'G:pythonuntitledstudy9ceshi')
    
    transport = paramiko.Transport(('172.16.200.30', 22))
    transport.connect(username='root', pkey=private_key)
    
    ssh = paramiko.SSHClient()
    ssh._transport = transport
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('ds')
    
    res, err = stdout.read(), stderr.read()
    result = res if res else err
    print(result.decode())
    
    transport.close()
    

      

    三、SFTPClient

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

      3.1 基于用户名和密码

    import paramiko
    
    transport = paramiko.Transport(('172.16.200.30', 22))
    transport.connect(username='root', password='111111')
    
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # 将本地文件上传至服务器
    sftp.put(r'G:pythonuntitledstudy9ceshi', '/tmp/ceshi')
    
    # 将远程服务器的文件下载至本地
    sftp.get('/tmp/test.txt', r'G:pythonuntitledstudy9	est_linux.txt')
    
    transport.close()
    
    
    #注:
    上传和下载的路径必须是全路径,即必须把文件名也加上,不能只写目录名
    

      3.2 基于公钥和私钥上传和下载

      同样改变不多

    import paramiko
    
    # 秘钥
    private_key = paramiko.RSAKey.from_private_key_file(r'G:pythonuntitledstudy9ceshi')
    
    transport = paramiko.Transport(('172.16.200.30', 22))
    transport.connect(username='root', pkey=private_key)
    
    sftp = paramiko.SFTPClient.from_transport(transport)
    
    # 将本地文件上传至服务器
    sftp.put(r'G:pythonuntitledstudy9ceshi', '/tmp/ceshi')
    
    # 将远程服务器的文件下载至本地
    sftp.get('/tmp/test.txt', r'G:pythonuntitledstudy9	est_linux.txt')
    
    transport.close()
    

      

  • 相关阅读:
    Java OCR tesseract 图像智能字符识别技术
    模板
    模板
    奇怪的haproxy 跳转
    奇怪的haproxy 跳转
    tomcat path配置
    tomcat path配置
    Mongodb 安装迁移
    image.xx.com 通过haproxy 跳转到内部图片服务器
    mysqldump 利用rr隔离实现一致性备份
  • 原文地址:https://www.cnblogs.com/bigberg/p/7800784.html
Copyright © 2020-2023  润新知