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 30 Python
Python实现文件复制删除
Apr 19 Python
你真的了解Python的random模块吗?
Dec 12 Python
使用python实现knn算法
Dec 20 Python
python图书管理系统
Apr 05 Python
Python绘制3D图形
May 03 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
Python3远程监控程序的实现方法
Jul 15 Python
python处理document文档保留原样式
Sep 23 Python
java关于string最常出现的面试题整理
Jan 18 Python
Python中rapidjson参数校验实现
Jul 25 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实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
jQuery日程管理插件fullcalendar使用详解
2017/01/07 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
python中的函数用法入门教程
2014/09/02 Python
Django使用Celery异步任务队列的使用
2018/03/13 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
Java基础知识面试要点
2016/07/29 面试题
开业庆典答谢词
2014/01/18 职场文书
幼儿园开学家长寄语
2014/01/19 职场文书
个人委托书怎么写
2014/04/04 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
2015年团支书工作总结
2015/04/03 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书