python3模拟实现xshell远程执行liunx命令的方法

依赖包: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命令的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Shell脚本中实现切换用户并执行命令操作

    今天公司同事来找到我说要在服务器上用另外一个用户执行python脚本,但设置到crontab里却老是root用户来执行,为了省事我就想了一个偷懒的办法,就是用shell脚本切换到那个用户,然后去执行那个python脚本.好了,这篇文章我只演示怎么用shell脚本切换到其他用户执行命令. 系统:centos 5.x 脚本内容: cat test.sh 复制代码 代码如下: #!/bin/bash su - test <<EOF pwd; exit; EOF 执行结果图: 当然也可以用下面的命令来

  • python3模拟实现xshell远程执行liunx命令的方法

    依赖包: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.passwo

  • Java JSch远程执行Shell命令的方法

    目录 背景 JSch简介 使用示例 需要注意的点 参考文档 背景 项目需求,需要远程 ssh 登录到某个节点执行 shell 命令来完成任务.对于这种需求,如果不用 java 程序,直接 linux 的 ssh 命令就可以完成,但是在编码到程序中时需要相关的程序包来完成,本文主要介绍在 java 中如何使用 JSch 包实现 ssh 远程连接并执行命令. JSch 简介 JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器

  • python基于socket模拟实现ssh远程执行命令

    一.subprocess.Popen() subprocess模块定义了一个类: Popen 类原型: class subprocess.Popen( args, bufsize = 0, executable = None, stdin = None, stdout = None, stderr = None, preexec_fn = None, close_fds = False, shell = False, cwd = None, env = None, universal_newli

  • python基于paramiko库远程执行 SSH 命令,实现 sftp 下载文件

    楔子 我们使用 Python 避免不了和 Linux 打交道,而有时我们需要执行一些 shell 命令.如果在本地的话,那么可以通过调用 os.system 或者 subprocess.Popen 来执行,但如果我们希望远程执行其它机器上的 shell 命令,这个时候该怎么做呢?下面我们就来推荐一个第三方库 paramiko,看看如何使用 Python 远程操作其它机器. paramiko 网络传输是遵循协议的,比如 SSH,paramiko 则是实现了 SSHv2 协议的一个 Python 第

  • 解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题

    Python - paramiko 模块远程执行ssh 命令 nohup 不生效的问题解决 1.使用 paramiko 模块ssh 登陆到 linux 执行nohup命令不生效 # 执行命令 def command(ssh_config, cmd, result_print=None, nohup=False): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.con

  • Xshell如何添加快捷命令的方法

    作为好用的终端模拟器,Xshell经常被开发者用来远程管理主机服务器,为了更加高效地进行操作,我们可以添加一些快捷命令,从而运用命令来操作. 到底该怎么添加快捷命令呢?下面就一起来学习具体操作方法. 具体步骤如下: 第一步:鼠标点击Xshell菜单栏"查看"菜单,在其下拉选项勾选"快速命令",如下图所示. 勾选快捷命令 图1:在查看下勾选快捷命令 第二步:执行以上操作后,可以在窗口下方看到快速命令快捷键的添加位置,双击添加即可. 快捷命令添加位置 图2:快捷命令添加

  • C#执行DOS命令的方法

    本文实例讲述了C#执行DOS命令的方法.分享给大家供大家参考.具体实现方法如下: 在c#程序中,有时会用到调用cmd命令完成一些功能,本文介绍的如下方法,可实现c#执行DOS命令,并返回结果的功能. 复制代码 代码如下: //dosCommand Dos命令语句  public string Execute(string dosCommand)  {      return Execute(dosCommand, 10);  }  /// <summary>  /// 执行DOS命令,返回DO

  • PHP对文件夹递归执行chmod命令的方法

    本文实例讲述了PHP对文件夹递归执行chmod命令的方法.分享给大家供大家参考.具体分析如下: 这里对文件夹和文件递归执行chmod命令来改变执行权限 <?php function recursiveChmod($path, $filePerm=0644, $dirPerm=0755) { // Check if the path exists if(!file_exists($path)) { return(FALSE); } // See whether this is a file if(

  • PHP在linux上执行外部命令的方法

    目录: 一.PHP中调用外部命令介绍 二.关于安全问题 三.关于超时问题 四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍 在PHP中调用外部命令,可以用,1>调用专门函数.2>反引号.3>popen()函数打开进程,三种方法来实现: 方法一:用PHP提供的专门函数(四个): PHP提供4个专门的执行外部命令的函数:exec(), system(), passthru(), shell_exec() 1)exec() 原型: string exec ( st

  • PHP中执行cmd命令的方法

    本文介绍下,在php代码中执行cmd命令的方法,介绍下在php.ini文件中配置safe_mode参数支持命令执行的方法,有需要的朋友参考下. 说明: 本节内容在wamp包安装的环境实现. 首先,打开php.ini,关掉安全模式safe_mode = off,然后在看看 禁用函数列表 disable_functions = proc_open, popen, exec, system, shell_exec ,把exec去掉. php代码: 复制代码 代码如下: <?php exec("m

随机推荐