码迷,mamicode.com
首页 > 其他好文 > 详细

堡垒机 Paramiko 模块

时间:2017-12-20 20:06:01      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:key   linux   添加   .com   /tmp   command   不能   oca   协议   

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

 

  三、堡垒机

  如下图所示:

    技术分享图片

 

堡垒机 Paramiko 模块

标签:key   linux   添加   .com   /tmp   command   不能   oca   协议   

原文地址:http://www.cnblogs.com/iforelse/p/8075284.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!