使用python

时间:2017-02-21 18:40:42

标签: python linux ssh

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

我想使用python脚本来自动完成这些无聊的任务。它会是这样的:

  • ssh host1
  • 部署内容
  • 从host1注销
  • ssh host2
  • 重启东西
  • 从host2退出
  • ssh host3
  • 检查健康状况
  • 从host3退出
  • ...

这会让我的工作效率降低,我想知道是否有一些不错的,符合人体工程学且易于实现的东西,可以通过编程方式处理和运行ssh会话上的命令并为我输出报告。

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

2 个答案:

答案 0 :(得分:4)

您可以在这些主机上设置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()

答案 1 :(得分:4)

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

  • 用于低级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')

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

[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密钥等等。允许在多个主机上轻松完成任务并行化等等。