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实现Const详解
Jan 27 Python
Python的Django框架使用入门指引
Apr 15 Python
Python引用传值概念与用法实例小结
Oct 07 Python
单链表反转python实现代码示例
Feb 08 Python
python 字符串只保留汉字的方法
Nov 16 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
详解python中eval函数的作用
Oct 22 Python
Python二次规划和线性规划使用实例
Dec 09 Python
Python接口自动化判断元素原理解析
Feb 24 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 Python
python如何在word中存储本地图片
Apr 07 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 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 输出缓存详解
2009/06/20 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
php递归创建目录的方法
2015/02/02 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
js计算页面刷新的次数
2009/07/20 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
canvas实现钟表效果
2017/02/13 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Python的Flask框架与数据库连接的教程
2015/04/20 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
Python实现图像的垂直投影示例
2020/01/17 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
python实现ftp文件传输功能
2020/03/20 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
结构工程个人自荐信范文
2013/11/30 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
科技活动周标语
2014/10/08 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书