使用python自动执行ssh命令

2024-05-06 14:57:38 发布

您现在位置:Python中文网/ 问答频道 /正文

所以每天,我都需要通过ssh登录到几个不同的主机,并在那里运行一些维护命令,以便QA团队能够测试我的特性。

我想用一个python脚本来自动完成这些无聊的任务。可能是这样的:

  • ssh主机1
  • 部署资料
  • 从主机1注销
  • ssh主机2
  • 重新开始工作
  • 从主机2注销
  • ssh主机3
  • 检查东西的健康状况
  • 从主机3注销
  • 。。。

它正在扼杀我的工作效率,我想知道是否有好的,符合人体工程学的,易于实现的东西,可以处理和运行ssh会话上的命令编程,并为我输出一个报告。

当然,我会编写代码,我只是想要一些不是bash脚本的建议(因为这些建议不适合人类阅读)。


Tags: 命令脚本部署报告编程特性工程学团队
3条回答

您可以通过编程方式使用以下内容:

  • 对于低级SSH自动化-Paramiko
  • 对于更高级别的自动化-Fabric

或者,如果您的活动都是围绕着典型系统管理任务的自动化展开的,请查看编排工具:

要在Fabric中给出一个示例,请定义一个要登录到主机并运行uname -a的任务:

from fabric import *
from fabric.api import *

env.hosts = ['localhost']

def login_to_host_and_run_uname():
    run('uname -a')

您可以将其作为独立的fabric命令运行:

[none][20:03:32] vlazarenko@alluminium (~/tests)$ fab -f fab.py login_to_host_and_run_uname
[localhost] Executing task 'login_to_host_and_run_uname'
[localhost] run: uname -a
[localhost] Passphrase for private key:
[localhost] out: Darwin alluminium 16.5.0 Darwin Kernel Version 16.5.0: Tue Jan 31 18:57:20 PST 2017; root:xnu-3789.50.195.1.1~1/RELEASE_X86_64 x86_64
[localhost] out:


Done.
Disconnecting from localhost... done.

Fabric还支持用于sudo()的简单包装器、缓存和使用SSH密钥等,允许在多个主机上轻松进行任务并行化等等。

你能在那些主机上设置一个Cron作业或类似的吗?那可能是最理想的。

如果您没有设置Cron作业的权限,我将使用名为paramiko的库。代码如下:

ssh = paramiko.SSHClient()
ssh.connect(host, port=p, timeout=2)
cmd = "ls"
stdin, stdout, stderr = ssh.exec_command(cmd)
for line in stdout.readlines():
    print(line)
ssh.close()

如果这些手动操作太多,那么我可以研究一些服务器配置管理,比如Ansible。

我用以下方法实现了这种自动化:

  1. 负责的
  2. Python织物
  3. 耙子

相关问题 更多 >