• Python paramiko


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

    二、SSHClient用于连接远程服务器并执行基本命令。

      1、基于公钥密钥连接 

     1 #!/usr/bin/python
     2 # -*- coding : utf-8 -*-
     3 # 作者: Presley
     4 # 时间: 2018-11-28
     5 # 邮箱:1209989516@qq.com
     6 # 这是我用来练习python paramiko的测试脚本
     7 
     8 import paramiko
     9 
    10 private_key = paramiko.RSAKey.from_private_key_file("/home/wohaoshuai/.ssh/id_rsa") #指定密钥文件路径
    11 
    12 #创建SSH对象
    13 ssh = paramiko.SSHClient()
    14 
    15 #允许连接不在know_hosts文件中的主机
    16 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   #跳过询问yes或no步骤
    17 
    18 #连接服务器
    19 ssh.connect(hostname="192.168.10.44",port=22,username="wohaoshuai",key=private_key)
    20 
    21 #执行命令
    22 stdin,stdout,stderr = ssh.exec_command("df")
    23 
    24 #获取命令结果
    25 result,err = stdout.read() , stderr.read()
    26 if not err:
    27     print(result)
    28 else:print(err)
    29 #关闭连接
    30 ssh.close()

    2、基于用户名密码验证 

     1 #!/usr/bin/python
     2 # -*- coding : utf-8 -*-
     3 # 作者: Presley
     4 # 时间: 2018-11-28
     5 # 邮箱:1209989516@qq.com
     6 # 这是我用来练习python paramiko的测试脚本
     7 
     8 import paramiko
     9 
    10 #创建SSH对象
    11 ssh = paramiko.SSHClient()
    12 
    13 #允许连接不在know_hosts文件中的主机
    14 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   #跳过询问yes或no步骤
    15 
    16 #连接服务器
    17 ssh.connect(hostname="192.168.10.44",port=22,username="root",password="123456")
    18 
    19 #执行命令
    20 stdin,stdout,stderr = ssh.exec_command("df")
    21 
    22 #获取命令结果
    23 result,err = stdout.read().decode("utf-8") , stderr.read().decode("utf-8")
    24 if not err:
    25     print(result)
    26 else:print(err)
    27 #关闭连接
    28 ssh.close()

    3、使用filter装逼

     1 # -*- coding : utf-8 -*-
     2 # 作者: Presley
     3 # 时间: 2018-12-08
     4 # 邮箱:1209989516@qq.com
     5 # 这是我用来练习mysql操作的测试脚本
     6 
     7 import paramiko
     8 
     9 import paramiko
    10 
    11 #创建SSH对象
    12 ssh = paramiko.SSHClient()
    13 
    14 #允许连接不在know_hosts文件中的主机
    15 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())   #跳过询问yes或no步骤
    16 
    17 #连接服务器
    18 ssh.connect(hostname="192.168.10.44",port=22,username="root",password="123456")
    19 
    20 #执行命令
    21 stdin,stdout,stderr = ssh.exec_command("df")
    22 
    23 #获取命令结果
    24 
    25 result = list(filter(lambda x: x is not None,[stdout.read().decode("utf-8"),stderr.read().decode("utf-8")]))[0] #将后面列表中的两个值赋值给x,如果x不为None则留在列表中,否则就过滤掉
    26 print(result)
    27 # result,err = stdout.read().decode("utf-8") , stderr.read().decode("utf-8")
    28 # if not err:
    29 #     print(result)
    30 # else:print(err)
    31 #关闭连接
    32 ssh.close()

    三、上传和下载文件

     1 # -*- coding : utf-8 -*-
     2 # 作者: Presley
     3 # 时间: 2018-12-08
     4 # 邮箱:1209989516@qq.com
     5 # 这是我用来练习mysql操作的测试脚本
     6 
     7 
     8 import paramiko
     9 
    10 transport = paramiko.Transport(('192.168.10.44',22))
    11 transport.connect(username="root",password="123456")
    12 sftp = paramiko.SFTPClient.from_transport(transport)
    13 
    14 #将当前路径aaa.txt上传至服务器 /tmp/test.py
    15 sftp.put("aaa.txt","/tmp/test.py")
    16 
    17 #将/tmp/test.py下载到本地当前路径下的bbb.txt
    18 sftp.get("/tmp/test.py","bbb.txt")
    19 
    20 transport.close()

      

  • 相关阅读:
    UVA 1386
    疯狂Android演讲2 环境配置
    七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)
    【iOS发展-44】通过案例谈iOS重构:合并、格式化输出、宏观变量、使用数组来存储数据字典,而且使用plist最终的知识
    jQuery选择
    一个月操作总结
    C++易vector
    oracle rac 在完成安装错误。
    NginX issues HTTP 499 error after 60 seconds despite config. (PHP and AWS)
    解决Eclipse中文乱码的方法
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/10034262.html
Copyright © 2020-2023  润新知