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类参数self使用示例
Feb 17 Python
Python字符串格式化输出方法分析
Apr 13 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
Python实现简单的四则运算计算器
Nov 02 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
Oct 29 Python
利用python计算windows全盘文件md5值的脚本
Jul 27 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
python中@property的作用和getter setter的解释
Dec 22 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(6) 面向对象
2010/02/16 PHP
php中获得视频时间总长度的另一种方法
2011/09/15 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
PHP验证码函数代码(简单实用)
2013/09/29 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
[03:17]DOTA2英雄基础教程 剧毒术士
2013/12/12 DOTA
python 自动提交和抓取网页
2009/07/13 Python
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
python自然语言编码转换模块codecs介绍
2015/04/08 Python
python中执行shell的两种方法总结
2017/01/10 Python
python基础练习之几个简单的游戏
2017/11/10 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
python操作gitlab API过程解析
2019/12/27 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
11月红领巾广播稿
2014/01/17 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书