堡垒机 Paramiko 模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堡垒机 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

 

  三、堡垒机

  如下图所示:

    技术分享图片

 

以上是关于堡垒机 Paramiko 模块的主要内容,如果未能解决你的问题,请参考以下文章

Python paramiko模块 + 堡垒机

堡垒机 Paramiko 模块

堡垒机之paramiko模块

python2.0 s12 day8 _ 堡垒机前戏paramiko模块

Python之路第八篇:堡垒机实例以及数据库操作(paramiko)

堡垒机 paramiko 自动登陆代码