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绘图方法实例入门
May 19 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
python docx 中文字体设置的操作方法
May 08 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
Django工程的分层结构详解
Jul 18 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
Nov 15 Python
使用python远程操作linux过程解析
Dec 04 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
Python读取配置文件(config.ini)以及写入配置文件
Apr 08 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
Python中logger日志模块详解
Aug 04 Python
Python Opencv图像处理基本操作代码详解
Aug 31 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/10/10 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
PHP的消息通信机制测试实例
2016/11/10 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
深入浅析Python中的yield关键字
2018/01/24 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
python动态文本进度条的实例代码
2020/01/22 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
.NET方向面试题
2014/11/20 面试题
长青弘远的面试题
2012/06/09 面试题
信息系统专业个人求职信范文
2013/12/07 职场文书
英语商务邀请函范文
2014/01/16 职场文书
赔偿协议书范本
2014/04/15 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
css3带你实现3D转换效果
2022/02/24 HTML / CSS