python3模拟实现xshell远程执行liunx命令的方法


Posted in Python onJuly 12, 2019

依赖包:pip install paramiko

源码demo:

from time import *
import paramiko
# 定义一个类,表示一台远端linux主机
class Linux(object):
  # 通过IP, 用户名,密码,超时时间初始化一个远程Linux主机
  def __init__(self, ip, username, password, timeout=30):
    self.ip = ip
    self.username = username
    self.password = password
    self.timeout = timeout
    # transport和chanel
    self.t = ''
    self.chan = ''
    # 链接失败的重试次数
    self.try_times = 3
 
  # 调用该方法连接远程主机
  def connect(self):
    while True:
      # 连接过程中可能会抛出异常,比如网络不通、链接超时
      try:
        self.t = paramiko.Transport(sock=(self.ip, 22))
        self.t.connect(username=self.username, password=self.password)
        self.chan = self.t.open_session()
        self.chan.settimeout(self.timeout)
        self.chan.get_pty()
        self.chan.invoke_shell()
        # 如果没有抛出异常说明连接成功,直接返回
        print('连接%s成功' % self.ip)
        # 接收到的网络数据解码为str
        print(self.chan.recv(65535).decode('utf-8'))
        return
      # 这里不对可能的异常如socket.error, socket.timeout细化,直接一网打尽
      except Exception as e1:
        if self.try_times != 0:
          print('连接%s失败,进行重试' % self.ip)
          self.try_times -= 1
        else:
          print('重试3次失败,结束程序')
          exit(1)
 
  # 断开连接
  def close(self):
    self.chan.close()
    self.t.close()
 
  # 发送要执行的命令
  def send(self, cmd):
    cmd += '\r'
    result = ''
    # 发送要执行的命令
    self.chan.send(cmd)
    # 回显很长的命令可能执行较久,通过循环分批次取回回显,执行成功返回true,失败返回false
    while True:
      sleep(0.5)
      ret = self.chan.recv(65535)
      ret = ret.decode('utf-8')
      result += ret
      return result
  '''
  发送文件
  @:param upload_files上传文件路径 例如:/tmp/test.py
  @:param upload_path 上传到目标路径 例如:/tmp/test_new.py
  '''
  def upload_file(self,upload_files,upload_path):
    try:
      tran=paramiko.Transport(sock=(self.ip, self.port))
      tran.connect(username=self.username, password=self.password)
      sftp = paramiko.SFTPClient.from_transport(tran)
      result=sftp.put(upload_files, upload_path)
      return True if result else False
    except Exception as ex:
      print(ex)
      tran.close()
    finally:
      tran.close()
 
 
# 连接正常的情况
if __name__ == '__main__':
  host = Linux('192.168.16.57', 'root', '+B*A15*EFpKG') # 传入Ip,用户名,密码
  host.connect()
  # result = host.send('ls') # 发送一个查看ip的命令
  def input_cmd(str):
    return input(str)
  tishi_msg="输入命令:"
  while True:
    msg=input(tishi_msg)
    if msg=="exit":
      host.close()
      break
    else:
      res=host.send(msg)
      data=res.replace(res.split("\n")[-1],"")
      tishi_msg=res.split("\n")[-1]
      print(res.split("\n")[-1] + data.strip("\n"))

运行代码测试效果图:

python3模拟实现xshell远程执行liunx命令的方法

以上这篇python3模拟实现xshell远程执行liunx命令的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的tuple元组详细介绍
Feb 02 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
Python中的fileinput模块的简单实用示例
Jul 09 Python
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 Python
Python 安装setuptools和pip工具操作方法(必看)
May 22 Python
简单实现python数独游戏
Mar 30 Python
python发送邮件脚本
May 22 Python
python elasticsearch从创建索引到写入数据的全过程
Aug 04 Python
matlab灰度图像调整及imadjust函数的用法详解
Feb 27 Python
用opencv给图片换背景色的示例代码
Jul 08 Python
python 基于卡方值分箱算法的实现示例
Jul 17 Python
python实现学生管理系统开发
Jul 24 Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 #Python
教你如何编写、保存与运行Python程序的方法
Jul 12 #Python
如何不用安装python就能在.NET里调用Python库
Jul 12 #Python
python 执行终端/控制台命令的例子
Jul 12 #Python
python IDLE 背景以及字体大小的修改方法
Jul 12 #Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 #Python
Python爬虫抓取技术的一些经验
Jul 12 #Python
You might like
php.ini中文版
2006/10/09 PHP
PHP has encountered an Access Violation
2007/01/15 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
微信支付开发维权通知实例
2016/07/12 PHP
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
小程序实现投票进度条
2019/11/20 Javascript
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
Python基于Tkinter实现的记事本实例
2015/06/17 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
python TCP包注入方式
2020/05/05 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
Shell如何接收变量输入
2016/08/06 面试题
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
大三预备党员入党思想汇报
2014/01/08 职场文书
快餐店的创业计划书范文
2014/01/29 职场文书
标准毕业生自荐信
2014/06/24 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
转学证明范本
2015/06/19 职场文书
教师研修随笔感言
2015/11/18 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL