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主机的更多相关文章

  1. 远程操作Linux主机

    通过putty文件访问: 下载路径:https://the.earth.li/~sgtatham/putty/0.70/w32/putty-0.70-installer.msi 通过Python文件执 ...

  2. java使用Jsch实现远程操作linux服务器进行文件上传、下载,删除和显示目录信息

    1.java使用Jsch实现远程操作linux服务器进行文件上传.下载,删除和显示目录信息. 参考链接:https://www.cnblogs.com/longyg/archive/2012/06/2 ...

  3. Notepad++【远程操作linux文件】

    目录 目的 预期效果 操作步骤 1.打开插件 2.安装NppFTP 3.连接远程主机 注意 目的 通过Notepad++远程登录linux主机,修改配置文件 预期效果 在Notepad++上登录lin ...

  4. 远程联机linux主机

    远程联机linux主机 推荐使用 ssh  如 ssh user@www.abc.com(ssh使用公钥+私钥非对称加密,数据传输安全,不要使用telnet) 传输文件:sftp 或者 scp 若想使 ...

  5. putty怎么用?如何使用Putty远程管理Linux主机

    Putty是一个免费的Windows 32平台下用于telnet.rlogin和ssh客户端的远程客户端工具,可以通过PUTTY快速的实现SSH连接linux等主机,下面小编就给大家演示一下如何使用P ...

  6. 使用SSH客户端远程登录Linux主机

    使用SSH客户端远程登录Linux主机(可替代samba.ftp服务) . Linux系统起初就是为多用户而产生的,可以允许多个用户同时登录linux主机各自进行操作,如图1所示: 图1 SSH(Se ...

  7. python的paramiko模块-远程登录linux主机并操作

    paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作. 如果python服务器对被远程控制机器开启了免密验证,即在python服务器上可通过ssh 用户名@被控制机 ...

  8. Python Paramiko模块与MySQL数据库操作

    Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...

  9. python中使用paramiko模块并实现远程连接服务器执行上传下载

    paramiko模块 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系 ...

随机推荐

  1. Oracle通过SQL语句查看table所引用的对象(View/Function/Procedure/Trigger)

    通过使用user_dependencies进行查看,如下: SELECT * FROM user_dependencies WHERE referenced_name='SFCUSN' --Table ...

  2. 6 Ubuntu软件安装

      6 软件安装¶ 6.1 通过apt 安装/卸载软件¶ apt是Advanced Packaging Tool,是Linux下的一款安装包管理工具 可以在终端中方便的安装/卸载/更新软件包 # 1. ...

  3. 《Web Development with Go》Mangodb查询collection内所有记录

    相当于select * from table; package main import ( "fmt" "log" "time" " ...

  4. 10 个提升效率的Linux小技巧

    您是否曾经惊讶于看到某人在 UNIX 中非常快速地工作,触发命令并快速地执行操作?是的,我碰到过几次,并且我一直都在向那些超级巨星开发者学习.在本文中,我想分享一些 UNIX 命令实践,这些实践是我在 ...

  5. os.path.isfile()的正确用法(正确用法)

    之前网上查找os.path.isfile( )的使用:发现有些是错误的,主要原因是,传入的参数是相对路径,不是绝对路径. 但是,经过我的实验发现:os.path.isfile( )需要传入的参数是绝对 ...

  6. Maven学习 --- <distributionManagement>

    在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...

  7. IDEA中安装EasyCode插件并连接数据库生成代码

    场景 EasyCode是基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml).只要是与数据库相关的代码都可以通过自定义模板来生成.支持数据库类型与j ...

  8. Inherit from the Business Class Library Class 继承自Business类(EF)

    In this lesson, you will learn how to implement business classes for your application using the Busi ...

  9. Navicat Premium12.0 常用快捷键

  10. Javascript 的定时器 setInterval,setTimeout,clearInterval

    今天开通博客.来1个.哇哈哈哈~~ 今天本来想复习BOM的看到定时器也算DOM一种 ?(是这样吗).分享一下 参考源于:八神吻你 http://www.cnblogs.com/lmfeng/archi ...