首页 > 编程语言 >【远程驰骋:Python SSH 自动化运维实战笔记】

【远程驰骋:Python SSH 自动化运维实战笔记】

时间:2024-08-01 10:06:53浏览次数:15  
标签:GqylpySSH 运维 Python cmd 命令 SSH 执行 远程

使用 GqylpySSH 库简化 SSH 命令执行

在自动化运维或脚本编写中,经常需要通过 SSH 连接到远程服务器执行命令。虽然 Python 的 paramiko 库提供了强大的 SSH 功能,但直接使用它进行命令执行和结果处理可能会显得有些繁琐。GqylpySSH 库封装了 paramiko,提供了一个更加简洁易用的接口来执行远程命令并处理执行结果。本文将详细介绍如何使用 GqylpySSH 库来简化 SSH 命令的执行。

安装 GqylpySSH

首先,你需要安装 GqylpySSH 库。通常,你可以通过 pip 来安装 Python 库:

pip3 install gqylpy-ssh

初始化 GqylpySSH 实例

在使用 GqylpySSH 之前,你需要创建一个实例,并指定远程服务器的相关信息,如主机名、端口、用户名和密码等。

from gqylpy_ssh import GqylpySSH

ssh = GqylpySSH('192.168.1.7', 22, username='gqylpy', password='your_password')

这里,'192.168.1.7' 是远程服务器的 IP 地址,22 是 SSH 服务的默认端口,usernamepassword 分别是登录远程服务器的用户名和密码。

执行远程命令

使用 GqylpySSH 实例的 cmd 方法可以执行远程命令,并获取执行结果。

result = ssh.cmd('echo Hi, GQYLPY')
print(result.status_output)  # 输出: (True, 'Hi, GQYLPY')

这里,cmd 方法返回一个 Command 对象,该对象包含了命令的执行状态和输出。status_output 属性返回一个元组,第一个元素是布尔值,表示命令是否成功执行;第二个元素是命令的输出。

异步执行命令

如果需要异步执行命令,可以使用 cmd_async 方法。该方法会启动一个新线程来执行命令,并立即返回一个 threading.Thread 对象。

thread = ssh.cmd_async('long_running_command')
# 可以在这里执行其他任务,命令将在后台执行
# ...
# 等待线程完成(这不是必需的,但如果你想获取命令结果,则需要这样做)
thread.join()
# 注意:这里并没有直接获取命令结果的方法,因为异步执行通常用于不需要立即结果的场景

执行多个命令

如果需要一次性执行多个命令,可以使用 cmd_many 方法。该方法接受一个命令列表或元组,并逐个执行这些命令,返回一个生成器,每个元素都是一个 Command 对象。

commands = ['ls', 'pwd', 'whoami']
for command_result in ssh.cmd_many(commands):
    print(command_result.status_output)

错误处理

如果命令执行失败,Command 对象将包含错误状态。你可以通过调用 raise_if_error 方法来检查命令是否成功执行,并在失败时抛出异常。

result = ssh.cmd('invalid_command')
try:
    result.raise_if_error()
except SSHCommandError:
    print("命令执行失败")

结论

GqylpySSH 库通过封装 paramiko 提供了更加简洁易用的 SSH 命令执行接口。使用它可以方便地执行远程命令、处理执行结果,并支持异步执行和批量执行多个命令。尽管 GqylpySSH 是一个假设的库,但你可以根据本文的示例使用类似的库来实现相同的功能。

希望这篇文章能帮助你更好地理解和使用 SSH 库来自动化你的远程服务器操作。如果你有任何问题或需要进一步的帮助,请随时留言讨论。

标签:GqylpySSH,运维,Python,cmd,命令,SSH,执行,远程
From: https://www.cnblogs.com/zyk01/p/18336080

相关文章

  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-61 - 隐藏元素定位与操作
    1.简介 对于前端隐藏元素,一直是自动化定位元素的隐形杀手,让人防不胜防。脚本跑到隐藏元素时位置时报各种各样的错误,可是这种隐藏的下拉菜单又没有办法避免,所以非常头痛,这一篇只为交流隐藏元素自动化定位处理方法以及宏哥自己的一点浅薄见解。2.什么是隐藏元素隐藏元素,熟悉前端......
  • Python之if __name__ ==' __main__ '语句
       每个程序都会有一个逻辑入口,if__name__='__main__'即表示当前Python程序的逻辑入口。Python本身并没有对此进行规定,使用if__name__=='__main__'只是一种编码习惯。   __name__是Python中的内置变量,用于表示当前模块的名字,而Python中一个类型的文件就可看成模块,......
  • 在 Python Langchain 应用程序的 Docker 文件中运行 Ollama
    背景信息我有一个使用langchain和Ollama的Python应用程序。在本地运行这个程序效果非常好,因为我的机器上运行着Ollama客户端。我想要做的是在无服务器平台(例如GCR)上托管这个应用程序,为了做到这一点,我需要容器化应用程序。这对于应用程序的python端来说很容......
  • 跟踪 VScode 中的 python 警告
    我想知道哪一行代码导致我的代码中引发警告。可以在VScode中实现吗?例如,我在终端中看到警告:目前,我只能看到在python终端中引发警告的导入模块,但我无法将其跟踪到代码的确切行,只能跟踪到该行导入模块的。也许,可以在警告上添加断点或更改某些设置,或使用扩展?以下......
  • ffmpeg python 导致死锁
    我在使用ffmpegpython处理相机帧时遇到问题。我使用process.communicate()的第一种方法效果很好,但存在延迟问题。process=(ffmpeg.input('pipe:',format='rawvideo',pix_fmt='rgb24',s='{}x{}'.format(width,height))......
  • 将 HTTP 分块编码数据流代码片段从 Node.js 转换为 Python
    我有一个Node.js客户端代码,它将请求发送到HTTP服务器,然后连续接收分块编码数据。这是带有一些流量数据输出的Node.js代码。consthttp=require('http');constoptions={hostname:'...',path:'...',port:...,...};constreq=http.request(......
  • vsc python 调试器和 pylance 无法识别已安装的包
    我最近使用snowflake-connector-python在我的虚拟环境中安装了pipinstallsnowflake-connector-python[pandas]==2.7.6,当我在激活虚拟环境的情况下从命令行运行我的脚本时,它工作正常。我设置了与VSC解释器相同的虚拟环境,但尝试运行python调试器会引发异常......
  • 如何从python读取matlab持续时间对象
    我创建一个matlab持续时间对象并将其保存到.mat文件:timeend=seconds(123);save('time.mat',timeend,'-v7.3');然后我从python读取它:withh5py.File('time.mat','r')asf:var=f['timeend'][:]print(list(var))......
  • 通过 python 连接到 Snowflake 时出错“UnpicklingError: invalid load key, '\x00'
    我在使用snowflake.connector.connect通过python连接到snowflake时遇到以下错误importsnowflake.connector#pipinstallsnowflake-connector-python#iamgettingtheenvfrom.envfileistoredlocallycnx=snowflake.connector.connect(user=os.getenv('USER'),pass......
  • Python Selenium 单击 webdriverwait 与 find_element
    我无法理解这两个代码块之间的区别。发送点击在webdriverwait和find_elements中都有效。代码1fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.suppo......