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 算法 排序实现快速排序
Jun 05 Python
python Django连接MySQL数据库做增删改查
Nov 07 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
python 同时读取多个文件的例子
Jul 16 Python
Python HTMLTestRunner库安装过程解析
May 25 Python
python使用opencv resize图像不进行插值的操作
Jul 05 Python
python和opencv构建运动检测器的实现
Mar 03 Python
Python tensorflow卷积神经Inception V3网络结构
May 06 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
当海贼王变成JOJO风
2020/03/02 日漫
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
js更优雅的兼容
2010/08/12 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
老生常谈js中的MVC
2017/07/25 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python实现绘制树枝简单示例
2014/07/24 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
详解python做UI界面的方法
2019/02/27 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
苏州园林导游词
2015/02/03 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript