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牛刀小试密码爆破
Feb 03 Python
Python守护进程用法实例分析
Jun 04 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
Python利用operator模块实现对象的多级排序详解
May 09 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
python实现双人五子棋(终端版)
Dec 30 Python
python如何获取网络数据
Apr 11 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入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
简略的前端架构心得&&基于editor为例子的编码小技巧
2010/11/25 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
JS跨域问题详解
2014/11/25 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
Flask数据库迁移简单介绍
2017/10/24 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
python查看列的唯一值方法
2018/07/17 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
Python如何实现转换URL详解
2019/07/02 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
几道Web/Ajax的面试题
2016/11/05 面试题
办公室前台的岗位职责
2013/12/20 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
思想道德自我评价2015
2015/03/09 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技