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()

 

  

posted @ 2018-11-28 20:00  Presley  阅读(182)  评论(0编辑  收藏  举报