paramiko模块
Python的paramiko模块基于SSH用于连接远程服务器并执行相关操作。实例:堡垒机项目
*下载安装
#pycrypto,paramiko 模块内部依赖pycrypto,如果直接安装paramiko不成功,则需安装pycrypto先,再装paramiko pip3 install pycryptopip3 install paramiko
1、SSHClient
用于连接远程服务器并执行基本命令
基于用户名密码连接:
import paramiko # 创建SSH对象ssh = paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', password='123') # 执行命令stdin, stdout, stderr = ssh.exec_command('df')# 获取命令结果 stdin可以先远程服务端输入指令(stdin.write(),stdout获取远程机器输出结果,stderr接收错误信息)result = stdout.read() # 关闭连接ssh.close()
基于公钥密钥连接:
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa') # 创建SSH对象ssh = paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', pkey=private_key) # 执行命令stdin, stdout, stderr = ssh.exec_command('df')# 获取命令结果result = stdout.read() # 关闭连接ssh.close()
paramiko封装子类transport
SSHclient 封装 transport:
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()
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 = transport10 11 stdin, stdout, stderr = ssh.exec_command('df')12 13 transport.close()
2、SFTPClient
用于连接远程服务器并执行上传下载
基于用户名密码上传下载
import paramiko transport = paramiko.Transport(('hostname',22))transport.connect(username='wupeiqi',password='123') sftp = paramiko.SFTPClient.from_transport(transport)# 将location.py 上传至服务器 /tmp/test.pysftp.put('/tmp/location.py', '/tmp/test.py')# 将remove_path 下载到本地 local_pathsftp.get('remove_path', 'local_path') transport.close()
基于公钥密钥上传下载
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa') transport = paramiko.Transport(('hostname', 22))transport.connect(username='wupeiqi', pkey=private_key ) sftp = paramiko.SFTPClient.from_transport(transport)# 将location.py 上传至服务器 /tmp/test.pysftp.put('/tmp/location.py', '/tmp/test.py')# 将remove_path 下载到本地 local_pathsftp.get('remove_path', 'local_path') transport.close()
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import paramiko 4 import uuid 5 6 class Haproxy(object): 7 8 def __init__(self): 9 self.host = '172.16.103.191'10 self.port = 2211 self.username = 'wupeiqi'12 self.pwd = '123'13 self.__k = None14 15 def create_file(self):16 file_name = str(uuid.uuid4())17 with open(file_name,'w') as f:18 f.write('sb')19 return file_name20 21 def run(self):22 self.connect()23 self.upload()24 self.rename()25 self.close()26 27 def connect(self):28 transport = paramiko.Transport((self.host,self.port))29 transport.connect(username=self.username,password=self.pwd)30 self.__transport = transport31 32 def close(self):33 34 self.__transport.close()35 36 def upload(self):37 # 连接,上传38 file_name = self.create_file()39 40 sftp = paramiko.SFTPClient.from_transport(self.__transport)41 # 将location.py 上传至服务器 /tmp/test.py42 sftp.put(file_name, '/home/wupeiqi/tttttttttttt.py')43 44 def rename(self):45 46 ssh = paramiko.SSHClient()47 ssh._transport = self.__transport48 # 执行命令49 stdin, stdout, stderr = ssh.exec_command('mv /home/wupeiqi/tttttttttttt.py /home/wupeiqi/ooooooooo.py')50 # 获取命令结果51 result = stdout.read()52 53 54 ha = Haproxy()55 ha.run()56 57 Demo