博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之路 Day8 paramiko学习
阅读量:4581 次
发布时间:2019-06-09

本文共 4066 字,大约阅读时间需要 13 分钟。

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

 基于公钥密钥连接:

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

 

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
Demo

 

转载于:https://www.cnblogs.com/Eric15/articles/9185291.html

你可能感兴趣的文章
js设计模式(二)---策略模式
查看>>
文件被写入后,但未关闭流,却又打开输入流,当然有问题。。
查看>>
sublime长期使用的快捷键
查看>>
calendar模块
查看>>
Java正则表达式示例
查看>>
Sketch教程
查看>>
29.奖金(拓扑排序)
查看>>
HTML5 中的拖放
查看>>
javascript 学习总结第二天
查看>>
「OC」点语法和成员变量的作用域
查看>>
thinkphp知识点
查看>>
对各种lca算法的理解
查看>>
[delphi]保证程序只运行一个实例
查看>>
java学习之语句结构
查看>>
python打包exe文件-ImportError: No module named 'queue'
查看>>
Memcache限制端口和访问IP
查看>>
IP通信基础 3.18
查看>>
【转】:ZooKeeper真不是最终一致性的,而是顺序一致性
查看>>
JSON Web Token in ASP.NET Web API 2 using Owin
查看>>
python安装.whl文件失败
查看>>