zoukankan      html  css  js  c++  java
  • 堡垒机 Paramiko 模块

    Paramiko 模块

    引用源:http://www.cnblogs.com/wupeiqi/articles/5095821.html

    前言:Paramiko模块封装了SSH协议,在连接服务器这方面广泛使用,是python连接Linux的重要模块。此模块封装了很多方法和类,可以根据需要合理使用。

    一、连接服务器

      1.用户名密码连接(不安全)。这里介绍两种方法:

        第一:

     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='c1.salt.com', port=22, username='wupeiqi', password='123')
     9   
    10 # 执行命令
    11 stdin, stdout, stderr = ssh.exec_command('df')
    12 # 获取命令结果
    13 result = stdout.read()
    14   
    15 # 关闭连接
    16 ssh.close()
    View Code

        第二:

     1 import paramiko
     2 
     3 transport = paramiko.Transport(('hostname', 22))
     4 transport.connect(username='wupeiqi', password='123')
     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()
    View Code

        这里推荐使用第二种封装的方法,用transport封装了连接要用到的用户名,密码,主机,端口等,重要的是可以忽略第一次连接时主机认证提示。

      2.公钥连接

        也是从上面两种方法中,添加公钥认证。公钥一定要放到指定的文件夹,否则会异常。

        第一:

     1 import paramiko
     2  
     3 private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/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='c1.salt.com', port=22, username='wupeiqi', key=private_key)
    11  
    12 # 执行命令
    13 stdin, stdout, stderr = ssh.exec_command('df')
    14 # 获取命令结果
    15 result = stdout.read()
    16  
    17 # 关闭连接
    18 ssh.close()
    View Code

        第二:

     1 import paramiko
     2 
     3 private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
     4 
     5 transport = paramiko.Transport(('hostname', 22))
     6 transport.connect(username='wupeiqi', 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()
    View Code

     二、文件传输

      这里要注意的是文件路径的参数,文件需要全路径。上传到服务器是直接覆盖,不能给文件夹路径,否则会报OSerror异常。方式都是封装好的,看个人喜好去选择。

      1.基于用户名密码(不安全)。

     1 import paramiko
     2  
     3 transport = paramiko.Transport(('hostname',22))
     4 transport.connect(username='wupeiqi',password='123')
     5  
     6 sftp = paramiko.SFTPClient.from_transport(transport)
     7 # 将location.py 上传至服务器 /tmp/test.py
     8 sftp.put('/tmp/location.py', '/tmp/test.py')
     9 # 将remove_path 下载到本地 local_path
    10 sftp.get('remove_path', 'local_path')
    11  
    12 transport.close()
    View Code

      2.基于公钥 

     1 import paramiko
     2  
     3 private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
     4  
     5 transport = paramiko.Transport(('hostname', 22))
     6 transport.connect(username='wupeiqi', pkey=private_key )
     7  
     8 sftp = paramiko.SFTPClient.from_transport(transport)
     9 # 将location.py 上传至服务器 /tmp/test.py
    10 sftp.put('/tmp/location.py', '/tmp/test.py')
    11 # 将remove_path 下载到本地 local_path
    12 sftp.get('remove_path', 'local_path')
    13  
    14 transport.close()
    View Code

      三、堡垒机

      如下图所示:

        

    是什么让你疯狂?
  • 相关阅读:
    Linux基础命令---arch
    JSON漫谈
    django中外键关联表的查询随笔
    <django中render_to_response的可选参数和使用方法>
    有趣的Redis:缓存被我写满了,该怎么办?
    2020全球C++及系统软件技术大会成功落下帷幕
    AWS 宣布创建 Elasticsearch 和 Kibana 分支
    Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
    自定义注解!绝对是程序员装逼的利器!!
    Java8 Stream
  • 原文地址:https://www.cnblogs.com/iforelse/p/8075284.html
Copyright © 2011-2022 走看看