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数据结构链表之单向链表(实例讲解)
Jul 25 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
python如何制作缩略图
Apr 30 Python
Python一行代码解决矩阵旋转的问题
Nov 30 Python
Python Selenium参数配置方法解析
Jan 19 Python
Django ValuesQuerySet转json方式
Mar 16 Python
python实现udp聊天窗口
Mar 31 Python
pandas使用之宽表变窄表的实现
Apr 12 Python
python中Ansible模块的Playbook的具体使用
May 28 Python
Python join()函数原理及使用方法
Nov 14 Python
如何用Python编写一个电子考勤系统
Feb 08 Python
python中的plt.cm.Paired用法说明
May 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缩略图生成程式(需要GD库支持)
2007/03/06 PHP
php header()函数使用说明
2008/07/10 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
js实现3D旋转效果
2020/08/18 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
Python处理字符串之isspace()方法的使用
2015/05/19 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Python算法之图的遍历
2017/11/16 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
python3.7调试的实例方法
2020/07/21 Python
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
C语言面试题
2013/05/19 面试题
寒假思想汇报
2014/01/10 职场文书
党员作风建设自查报告
2014/10/23 职场文书
辞职信格式范文
2015/05/13 职场文书
2016八一建军节慰问信
2015/11/30 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis