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对字典进行排序实例
Sep 25 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
使用Python中的cookielib模拟登录网站
Apr 09 Python
Python实现邮件的批量发送的示例代码
Jan 23 Python
Python callable()函数用法实例分析
Mar 17 Python
TensorFlow的权值更新方法
Jun 14 Python
python与字符编码问题
May 24 Python
Python 解码Base64 得到码流格式文本实例
Jan 09 Python
Python3使用xlrd、xlwt处理Excel方法数据
Feb 28 Python
Python APScheduler执行使用方法详解
Dec 10 Python
PyQt实现计数器的方法示例
Jan 18 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 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
手把手教你使用DedeCms的采集的图文教程
2007/03/11 PHP
PHP parse_url 一个好用的函数
2009/10/03 PHP
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
javaScript语法总结
2016/11/25 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
jQuery实现点击图标div循环放大缩小功能
2018/09/30 jQuery
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
Python3学习urllib的使用方法示例
2017/11/29 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
详解python做UI界面的方法
2019/02/27 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
详解Python 中的容器 collections
2020/08/17 Python
什么是SCM(软件配置管理)
2014/08/16 面试题
大学生两会学习心得体会
2014/03/10 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
小学班级管理心得体会
2016/01/07 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js