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实现方法
Nov 18 Python
Python实现的检测网站挂马程序
Nov 30 Python
在Python的Django框架中为代码添加注释的方法
Jul 16 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
创建Django项目图文实例详解
Jun 06 Python
python3.6生成器yield用法实例分析
Aug 23 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
简单瞅瞅Python vars()内置函数的实现
Sep 27 Python
Python实现aes加密解密多种方法解析
May 15 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
python中format函数如何使用
Jun 22 Python
Python列表的索引与切片
Apr 07 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 XML操作类DOMDocument
2009/12/16 PHP
php SQL Injection with MySQL
2011/02/27 PHP
php类中private属性继承问题分析
2012/11/01 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
php中请求url的五种方法总结
2017/07/13 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
Vue表单实例代码
2016/09/05 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
Vue.use源码分析
2017/04/22 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
javascript History对象原理解析
2020/02/17 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
让python json encode datetime类型
2010/12/28 Python
简单使用Python自动生成文章
2014/12/25 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
辩论赛主持词
2014/03/18 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers
使用CSS实现音波加载效果
2023/05/07 HTML / CSS