使用paramiko模块进行封装,远程操作linux主机
import time
import paramiko class HandleParamiko:
'''
定义一个linux处理类
''' def __init__(self, hostname, password, port=22, username='root'):
'''
构造器
:param hostname: 主机ip,type:str
:param password: 密码,type:str
:param port: 端口,type:int 默认22
:param username: 用户名,type:str
:return:
'''
self.t = None
self.sftp = None
self.hostname = hostname
self.password = password
self.port = port
self.username = username
self.client = paramiko.SSHClient() # 实例化SSHclient
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加策略,保存服务器的主机名和密钥信息
try:
self.client.connect(hostname=hostname,
port=port,
username=username,
password=password)
except Exception as all:
print(f"连接异常,请确认参数是否有误:{all}")
self.channel = self.client.invoke_shell() # 创建一个交互会话的对象 def sftp_client(self):
'''
创建一个sftp上传下载客户端
:return: sftp对象,调用put()和get()分别实现文件的上传和下载
'''
try:
self.t = paramiko.Transport((self.hostname, self.port))
self.t.connect(username=self.username, password=self.password)
self.sftp = paramiko.SFTPClient.from_transport(self.t)
return self.sftp
except FileNotFoundError as e:
print(f"FileNotFoundError:{e}") def cmd_res(self, cmd, get_way='out'):
'''
定义一个一次性会话方法(优点:响应速度快,缺点:不能保持会话)
:param cmd: linux命令,type:str
:param get_way: 支持:‘in’、‘out’、‘err’三种方式
:return: 回显结果
'''
stdin, stdout, stderr = self.client.exec_command(cmd)
if get_way == 'in':
return str(stdin.read()).replace('\\n', '\n')
elif get_way == 'out':
return str(stdout.read()).replace('\\n', '\n')
elif get_way == 'err':
return str(stderr.read()).replace('\\n', '\n')
else:
print("输入获取的方式有误,获取回显结果失败!") def cmd_ssh(self, cmd):
'''
定义一个交互会话的方法(优点:交互式会话,缺点:响应速度慢)
:param cmd: linux命令,type:str
:return:
'''
self.channel.send(cmd+'\n')
time.sleep(5)
try:
res = self.channel.recv(1024 * 100000).decode('utf-8')
except:
res = self.channel.recv(1024 * 100000).decode('gbk')
return res def close_channel(self):
'''
关闭交互式会话
:return:
'''
self.channel.close() def close_client(self):
'''
关闭SSH连接
:return:
'''
self.client.close()
使用paramiko模块进行封装,远程操作linux主机的更多相关文章
- 远程操作Linux主机
通过putty文件访问: 下载路径:https://the.earth.li/~sgtatham/putty/0.70/w32/putty-0.70-installer.msi 通过Python文件执 ...
- java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息
1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...
- Notepad++【远程操作linux文件】
目录 目的 预期效果 操作步骤 1.打开插件 2.安装NppFTP 3.连接远程主机 注意 目的 通过Notepad++远程登录linux主机,修改配置文件 预期效果 在Notepad++上登录lin ...
- 远程联机linux主机
远程联机linux主机 推荐使用 ssh 如 ssh user@www.abc.com(ssh使用公钥+私钥非对称加密,数据传输安全,不要使用telnet) 传输文件:sftp 或者 scp 若想使 ...
- putty怎么用?如何使用Putty远程管理Linux主机
Putty是一个免费的Windows 32平台下用于telnet.rlogin和ssh客户端的远程客户端工具,可以通过PUTTY快速的实现SSH连接linux等主机,下面小编就给大家演示一下如何使用P ...
- 使用SSH客户端远程登录Linux主机
使用SSH客户端远程登录Linux主机(可替代samba.ftp服务) . Linux系统起初就是为多用户而产生的,可以允许多个用户同时登录linux主机各自进行操作,如图1所示: 图1 SSH(Se ...
- python的paramiko模块-远程登录linux主机并操作
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作. 如果python服务器对被远程控制机器开启了免密验证,即在python服务器上可通过ssh 用户名@被控制机 ...
- Python Paramiko模块与MySQL数据库操作
Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...
- python中使用paramiko模块并实现远程连接服务器执行上传下载
paramiko模块 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系 ...
随机推荐
- Oracle查看 open_cursors 和 session_cached_cursors
本文转自 http://blog.itpub.net/25583515/viewspace-2152997/ 查看当前session已使用的最大open cursor数 和cached cursor数 ...
- ospf邻居建立过程
1. hello报文的作用 邻居发现:自动发现邻居路由器. 邻居建立:完成Hello报文中的参数协商,建立邻居关系. 邻居保持:通过Keepalive机制,检测邻居运行状态. hello报文的发送时间 ...
- C++ std::forward_list 基本用法
#include <iostream> #include <string> #include <forward_list> using namespace std; ...
- TKinter当Label绑定bind事件时传参方法
记录下tkinter的 当在label绑定bind事件时,遇到需要传参时的解决方法(因为有event存在 所以不能直接传参) https://www.cnblogs.com/liyuanhong/ar ...
- Centos7下Redis设置开机自启动服务
有个同事说重启了服务器没有自启动redis,我看了一下,是以前手动编译安装的模式,没有配置开机启动的服务 这边做个笔记记录一下redis如何设置编译安装模式的开机自启动. 第一种方法: 1.编写red ...
- Java描述设计模式(04):抽象工厂模式
本文源码:GitHub·点这里 || GitEE·点这里 一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用 ...
- C#时间戳与时间相互转换
代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...
- C#中实现文件重命名的方式
场景 在C#中如果是删除文件的话可以直接使用 if (System.IO.File.Exists(fileName)) { System.IO.File.Delete(fileName); } 但是如 ...
- ES6-字符串模板
es6字符串模板 // es5 let ananiah = "大诶呀"; let blog = "我要忘了你的样子"+ ananiah; console.log ...
- iOS中数组的倒序、升序、降序
NSMutableArray *array = [NSMutableArray arrayWithObjects:",nil]; // 倒序 NSMutableArray *resultAr ...