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中用于返回绝对值的abs()方法
May 14 Python
python3 pillow生成简单验证码图片的示例
Sep 19 Python
python正则表达式面试题解答
Apr 28 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
python 实现分页显示从es中获取的数据方法
Dec 26 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 Python
使用tensorflow实现矩阵分解方式
Feb 07 Python
django使用JWT保存用户登录信息
Apr 22 Python
Pytorch十九种损失函数的使用详解
Apr 29 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
ZF等常用php框架中存在的问题
2008/01/10 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
js静态作用域的功能。
2006/12/25 Javascript
javascript 写类方式之八
2009/07/05 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
css配合jquery美化 select
2013/11/29 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
详解python3实现的web端json通信协议
2016/12/29 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
python Django编写接口并用Jmeter测试的方法
2019/07/31 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
文史专业毕业生自荐信
2013/11/17 职场文书
小学班主任评语大全
2014/04/23 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
实习生辞职信范文
2015/03/02 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
2015年计生工作总结范文
2015/04/24 职场文书