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使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
Python解析Excle文件中的数据方法
Oct 23 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
python opencv实现证件照换底功能
Aug 19 Python
Python函数的默认参数设计示例详解
Dec 01 Python
Pytorch在NLP中的简单应用详解
Jan 08 Python
TFRecord格式存储数据与队列读取实例
Jan 21 Python
Python数据正态性检验实现过程
Apr 18 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
PHP array 的加法操作代码
2010/07/24 PHP
PHP开发注意事项总结
2015/02/04 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
12个非常有用的JavaScript技巧
2017/05/17 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Flask-Mail用法实例分析
2018/07/21 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
Python 列表反转显示的四种方法
2020/11/16 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
html5文字阴影效果text-shadow使用示例
2013/07/25 HTML / CSS
中国高端家电购物商城:顺电
2018/03/04 全球购物
清洁工岗位职责
2014/01/29 职场文书
运动会通讯稿50字
2014/01/30 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
情人节活动总结范文
2015/02/05 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python