使用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从一个平台连接到另外一个平台,进行一系 ...
随机推荐
- OGG For Oracle To PostgreSQL
本文档描述OGG(Oracle goldengate)为Oracle同步到PostgreSQL数据库配置.在目前去“IOE”潮流.PostgreSQL确实是Oracle最好的替代品之一. 实验环境如下 ...
- TICK技术栈(五)Kapacitor安装及使用
1.什么是Kapacitor? Kapacitor是InfluxData开源的数据处理引擎.它可以处理来自InfluxDB的流数据和批处理数据,并且用户可以用tickScript脚本来处理,监视和警报 ...
- CCPC 2019 秦皇岛 Angle Beats
题目 给出P个点,然后给出Q个询问,问从P中选出两个点和给的点能组成直角三角形的方法个数.-O2,时间限制5秒. \[2\leqslant P\leqslant 2000,\qquad 1\leqsl ...
- redis(二)集群 redis-cluster & redis主从同步
参考文档: http://geek.csdn.net/news/detail/200023 redis主从复制:https://blog.csdn.net/imxiangzi/article/deta ...
- SqlException:ConnectionTimeout Expired. The timeout period elapsed during the post-login phase
linux系统部署.netcore程序后,访问某台sqlserver 2008 R2数据库 Connection Timeout Expired. The timeout period elapsed ...
- 启动jar包并生成日志的linux脚本
启动脚本 nohup java -Xms300m -Xmx300m -jar $1 >log/$2 2>&1 & 使用方式 建立一个.sh结尾的脚本,里面放入此代码. 需要 ...
- 线程队列queue的使用
其实线程队列queue跟进程Queue的用法一样. 一.先进先出 import queue q = queue.Queue() q.put('kobe') q.put('cxk') print(q.g ...
- java高并发系列 - 第26篇:学会使用JUC中常见的集合,常看看!
这是java高并发系列第26篇文章. 环境:jdk1.8. 本文内容 了解JUC常见集合,学会使用 ConcurrentHashMap ConcurrentSkipListMap Concurrent ...
- Git - Git分支管理策略
前言 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的c ...
- 并发容器之ConcurrentLinkedQueue
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...