zoukankan      html  css  js  c++  java
  • Python 堡垒机与paramiko模块

    堡垒机前戏  

    开发堡垒机之前,先来学习Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作

    SSHClient
    用于连接远程服务器并执行基本命令
    基于用户名密码连接:
     1 import paramiko
     2 
     3 # 创建SSH对象
     4 ssh = paramiko.SSHClient()
     5 # 允许连接不在know_hosts文件中的主机
     6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
     7 # 连接服务器
     8 ssh.connect(hostname='192.168.48.20', port=22, username='root', password='hadoop')
     9 
    10 # 执行命令
    11 stdin, stdout, stderr = ssh.exec_command('ls')
    12 # 获取命令结果
    13 result = stdout.read()
    14 print(result.decode())
    15 
    16 # 关闭连接
    17 ssh.close()

    SSHClient 封装 Transport

     1 import paramiko
     2 
     3 transport = paramiko.Transport(('192.168.48.20', 22))
     4 transport.connect(username='root', password='hadoop')
     5 
     6 ssh = paramiko.SSHClient()
     7 ssh._transport = transport
     8 
     9 stdin, stdout, stderr = ssh.exec_command('df')
    10 print stdout.read()
    11 
    12 transport.close()

    基于公钥密钥连接:

     1 import paramiko
     2 
     3 private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
     4 
     5 # 创建SSH对象
     6 ssh = paramiko.SSHClient()
     7 # 允许连接不在know_hosts文件中的主机
     8 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
     9 # 连接服务器
    10 ssh.connect(hostname='192.168.48.20', port=22, username='root', pkey=private_key)
    11 
    12 # 执行命令
    13 stdin, stdout, stderr = ssh.exec_command('df')
    14 # 获取命令结果
    15 result = stdout.read()
    16 print(result.decode())
    17 
    18 # 关闭连接
    19 ssh.close()

    SSHClient 封装 Transport

     1 import paramiko
     2 
     3 private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
     4 
     5 transport = paramiko.Transport(('192.168.48.20', 22))
     6 transport.connect(username='root', pkey=private_key)
     7 
     8 ssh = paramiko.SSHClient()
     9 ssh._transport = transport
    10 
    11 stdin, stdout, stderr = ssh.exec_command('df')
    12 
    13 transport.close()

    基于私钥字符串进行连接

     1 import paramiko
     2 from io import StringIO
     3 
     4 key_str = """-----BEGIN RSA PRIVATE KEY-----
     5 MIIEoQIBAAKCAQEAo4E82UucG+L7T2yZIRiPC0fVd/LIKPZ9qR66NyCQW0N21os2
     6 30whHou2L4np3ASAVsTmf+mWctnCGcrWzn1QLuvV/joAWyJqK/L2IBZAZjZI2i+V
     7 HKXZuQixX7D2vyntOPOSPi0gy1Tw5P6njcRcXNyokHboN61hZ6z8pzL3kn+hrJuG
     8 By06g6zcn341ggmwxnQ9UaWI5ywxv6kMP9PBt6efD+J0QqLOKay4LShYZAsazdA7
     9 ZyOIc0sCHLDIcKfsjved0wbM3NIxssbpgMlpqKom5kU4OMgpq253U6QoyxT8CU2b
    10 d7DDFpJcmp5oIlavnlAEHK1TwlJqiR0580s8nwIBIwKCAQA8uvlYBiQKW58sIQWt
    11 NQHuP0Co5SXGEmkwL/wF2OUpNlC2FnN3gq03OzUKV8vkAawC+K1itdjLkrXPENNx
    12 RHzeOlbMJCwEl8EJAnis1RCa/jhRClv0sqFTWwANmYA4YAencGmEzu7scAG0JBJZ
    13 Ok4xHsJESWwx7/D6n1aHPtD75atCtI0sHVr4LH1crXhswcSC01t5Acu25/rQPITH
    14 PfWRchaUNp8LN2aBJK5iQYkoMsnHzy3v+q8sih5Rzqd/caIPvqWEz5pydZZ87nTR
    15 BVl4/RirfNVoR5PKWgMrLgWe6QwiCoVE+iFyrBW99EzE97BOGtSRMeSRDjdhGfdp
    16 yIn7AoGBANT6d0tvGboZLYzcVEVAMkPK0dW8MZCYmB6Wm9whsvUyoDv4ZYxEIZ7t
    17 HIAge2Yvs3dqoaRaIJIQOGHi2qhWtko3AGvvhIwghoAVjvPEbK//i5yo3i8SyqSn
    18 LpiqyRU0UMsFnVN16a/AKULsE7wXkXVEl5z7vhTYf0/0f6hxKcRZAoGBAMSIZYNw
    19 Ezy6pRHxCCIwug0lQfsoR8AnD9Ja4GgtF4Yk1Dn+mxRqJxtDVNi1XvcW4pfTFH3V
    20 rs/+2dhxR0l0Dnfezof0GD50cZKbokUTdbUUnILl295IUID3JiTl1VM5sze7u1db
    21 wy9wcmj95T/RFq5zvu/BaOs75+fxpm2Mtsm3AoGAEkFarrHAYGiO4DAkevbfvKr8
    22 CwGAl12JYbUjTWH5ZXleMQapnk77kUeGGZxiWTdJ5aoN2uMnXPoTdhrCSPF9VtGD
    23 sXruGqOzwdX2T2ibmg6W8Cu7Rd0KDhz1XYr7SvXbChZskiAMt0r8OO+p64z91tn+
    24 XemxNPydMr0vg3dp+uMCgYBqsHGfH5VqHC25SFTfXEe9/khjxWjHZamA0j9OfuDi
    25 a8OqdEWOvUht4rkH7W4RGw1LGtCcFOneoEpfjfN/pWbwnYYPSf6ITddA9Wa3yLw9
    26 urtdAHAK9A5x5UCXr/d2UoXcbTnQVmKkuWKuBiv+EmtmBFG1Wl2HA0Ngp8C/IIB8
    27 IQKBgQDGX4MO9ARZtLGnkPIfhejiSfl4Br4DFubKyGfwSf+afTv8wJ45vOKiSDnl
    28 nk/H1GDelIaL+/TfXsK36OuzzVc1sxN3ZZMOBG2OYfnPei5i+AhY3JuZirkStCN0
    29 AtnqAt5lzKHJinyg6kwW/FKa4pEik9Q/2ChW1DqGC2DmdW468g==
    30 -----END RSA PRIVATE KEY-----"""
    31 
    32 private_key = paramiko.RSAKey(file_obj=StringIO(key_str))
    33 transport = paramiko.Transport(('192.168.48.20', 22))
    34 transport.connect(username='root', pkey=private_key)
    35 
    36 ssh = paramiko.SSHClient()
    37 ssh._transport = transport
    38 
    39 stdin, stdout, stderr = ssh.exec_command('df')
    40 result = stdout.read()
    41 
    42 transport.close()
    43 
    44 print(result.decode())
    View Code
     

     
    SFTPClient
    用于连接远程服务器并执行上传下载
     
    基于用户名密码上传下载
     1 import paramiko
     2 
     3 transport = paramiko.Transport(('192.168.48.20', 22))
     4 transport.connect(username='root', password='hadoop')
     5 
     6 sftp = paramiko.SFTPClient.from_transport(transport)
     7 # 将location.py 上传至服务器 /tmp/test.py
     8 sftp.put('C:\Users\Administrator\Desktop\module04.zip', '/tmp/module04.zip')
     9 # 将remove_path 下载到本地 local_path
    10 sftp.get('/root/Python-3.5.1.tgz', 'C:\Users\Administrator\Desktop\Python-3.5.1.tgz')
    11 
    12 transport.close()

    基于公钥密钥上传下载

     1 import paramiko
     2 
     3 private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
     4 
     5 transport = paramiko.Transport(('192.168.48.20', 22))
     6 transport.connect(username='root', pkey=private_key)
     7 
     8 sftp = paramiko.SFTPClient.from_transport(transport)
     9 # 将location.py 上传至服务器 /tmp/test.py
    10 sftp.put('C:\Users\Administrator\Desktop\module04.zip', '/root/Public/module04.zip')
    11 # 将remove_path 下载到本地 local_path
    12 # sftp.get('remove_path', 'local_path')
    13 
    14 transport.close()
    Demo
  • 相关阅读:
    数据类型
    32个关键字
    标识符
    Xcode常用快捷键
    Linux中级之keepalived配置
    linux中级之keepalived概念
    Linux中级之lvs三个模式的图像补充(nat,dr,tun)
    linux中级之防火墙的数据传输过程
    Linux中级之netfilter/iptables应用及补充
    linux中级之lvs配置(命令)
  • 原文地址:https://www.cnblogs.com/breakering/p/6937748.html
Copyright © 2011-2022 走看看