1. import time
  2. import paramiko
  3.  
  4. class HandleParamiko:
  5. '''
  6. 定义一个linux处理类
  7. '''
  8.  
  9. def __init__(self, hostname, password, port=22, username='root'):
  10. '''
  11. 构造器
  12. :param hostname: 主机ip,type:str
  13. :param password: 密码,type:str
  14. :param port: 端口,type:int 默认22
  15. :param username: 用户名,type:str
  16. :return:
  17. '''
  18. self.t = None
  19. self.sftp = None
  20. self.hostname = hostname
  21. self.password = password
  22. self.port = port
  23. self.username = username
  24. self.client = paramiko.SSHClient() # 实例化SSHclient
  25. self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加策略,保存服务器的主机名和密钥信息
  26. try:
  27. self.client.connect(hostname=hostname,
  28. port=port,
  29. username=username,
  30. password=password)
  31. except Exception as all:
  32. print(f"连接异常,请确认参数是否有误:{all}")
  33. self.channel = self.client.invoke_shell() # 创建一个交互会话的对象
  34.  
  35. def sftp_client(self):
  36. '''
  37. 创建一个sftp上传下载客户端
  38. :return: sftp对象,调用put()和get()分别实现文件的上传和下载
  39. '''
  40. try:
  41. self.t = paramiko.Transport((self.hostname, self.port))
  42. self.t.connect(username=self.username, password=self.password)
  43. self.sftp = paramiko.SFTPClient.from_transport(self.t)
  44. return self.sftp
  45. except FileNotFoundError as e:
  46. print(f"FileNotFoundError:{e}")
  47.  
  48. def cmd_res(self, cmd, get_way='out'):
  49. '''
  50. 定义一个一次性会话方法(优点:响应速度快,缺点:不能保持会话)
  51. :param cmd: linux命令,type:str
  52. :param get_way: 支持:‘in’、‘out’、‘err’三种方式
  53. :return: 回显结果
  54. '''
  55. stdin, stdout, stderr = self.client.exec_command(cmd)
  56. if get_way == 'in':
  57. return str(stdin.read()).replace('\\n', '\n')
  58. elif get_way == 'out':
  59. return str(stdout.read()).replace('\\n', '\n')
  60. elif get_way == 'err':
  61. return str(stderr.read()).replace('\\n', '\n')
  62. else:
  63. print("输入获取的方式有误,获取回显结果失败!")
  64.  
  65. def cmd_ssh(self, cmd):
  66. '''
  67. 定义一个交互会话的方法(优点:交互式会话,缺点:响应速度慢)
  68. :param cmd: linux命令,type:str
  69. :return:
  70. '''
  71. self.channel.send(cmd+'\n')
  72. time.sleep(5)
  73. try:
  74. res = self.channel.recv(1024 * 100000).decode('utf-8')
  75. except:
  76. res = self.channel.recv(1024 * 100000).decode('gbk')
  77. return res
  78.  
  79. def close_channel(self):
  80. '''
  81. 关闭交互式会话
  82. :return:
  83. '''
  84. self.channel.close()
  85.  
  86. def close_client(self):
  87. '''
  88. 关闭SSH连接
  89. :return:
  90. '''
  91. 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. OGG For Oracle To PostgreSQL

    本文档描述OGG(Oracle goldengate)为Oracle同步到PostgreSQL数据库配置.在目前去“IOE”潮流.PostgreSQL确实是Oracle最好的替代品之一. 实验环境如下 ...

  2. TICK技术栈(五)Kapacitor安装及使用

    1.什么是Kapacitor? Kapacitor是InfluxData开源的数据处理引擎.它可以处理来自InfluxDB的流数据和批处理数据,并且用户可以用tickScript脚本来处理,监视和警报 ...

  3. CCPC 2019 秦皇岛 Angle Beats

    题目 给出P个点,然后给出Q个询问,问从P中选出两个点和给的点能组成直角三角形的方法个数.-O2,时间限制5秒. \[2\leqslant P\leqslant 2000,\qquad 1\leqsl ...

  4. redis(二)集群 redis-cluster & redis主从同步

    参考文档: http://geek.csdn.net/news/detail/200023 redis主从复制:https://blog.csdn.net/imxiangzi/article/deta ...

  5. SqlException:ConnectionTimeout Expired. The timeout period elapsed during the post-login phase

    linux系统部署.netcore程序后,访问某台sqlserver 2008 R2数据库 Connection Timeout Expired. The timeout period elapsed ...

  6. 启动jar包并生成日志的linux脚本

    启动脚本 nohup java -Xms300m -Xmx300m -jar $1 >log/$2 2>&1 & 使用方式 建立一个.sh结尾的脚本,里面放入此代码. 需要 ...

  7. 线程队列queue的使用

    其实线程队列queue跟进程Queue的用法一样. 一.先进先出 import queue q = queue.Queue() q.put('kobe') q.put('cxk') print(q.g ...

  8. java高并发系列 - 第26篇:学会使用JUC中常见的集合,常看看!

    这是java高并发系列第26篇文章. 环境:jdk1.8. 本文内容 了解JUC常见集合,学会使用 ConcurrentHashMap ConcurrentSkipListMap Concurrent ...

  9. Git - Git分支管理策略

    前言 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的c ...

  10. 并发容器之ConcurrentLinkedQueue

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...