2017-02-21 3 views
1

Так что каждый день, мне нужно войти в пару разных хостов через ssh и запустить там некоторые команды обслуживания, чтобы команда QA могла тестировать мои функции.Автоматизация команд ssh с python

Я хочу использовать скрипт python для автоматизации таких скучных задач. Было бы что-то вроде:

  • SSH host1
  • развернуть материал
  • выход из системы из host1
  • SSH host2
  • рестарт материал
  • Выход из host2
  • SSH host3
  • проверки здоровье на материалах
  • Выход из host3
  • ...

Это убивает мою производительность, и я хотел бы знать, если есть что-то хорошее, эргономичный и легко осуществить, что может работать и выполнять команды на SSH сессий программно и вывода доклад для меня.

Конечно, я сделаю код, мне просто нужны некоторые предложения, которые не являются сценариями bash (, потому что они не предназначены для чтения людьми).

+4

Хорошо написанный код оболочки, вероятно, будет легче читать, чем эквивалентный Python здесь, потому что он будет делать то, что он предназначен: запустить другие программы. – chepner

+2

Если вам нужно запустить те же команды на разных хостах, пакет материалов полезен - http://www.fabfile.org/ – pjames

+1

Вы имеете в виду [Ansible] (https://www.ansible.com/) или [Rundeck ] (http://rundeck.org/)? Есть буквально сотни –

ответ

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

Я лично считаю, что Paramiko будет немного утомительным. Обертка ткани вокруг него делает вещи намного более краткими. – favoretti

+0

Я дам Fabric попробовать в следующий раз, когда мне нужно его использовать, спасибо за предложение! – jarcobi889

2

Вы можете использовать следующие вещи программным образом:

  • Для автоматизации SSH низкого уровня - Paramiko
  • Для автоматизации несколько выше уровня - Fabric

В качестве альтернативы, если ваши действия связаны с автоматизацией типичных задач sysadmin - взгляните на инструменты оркестровки:

Для примера в ткань, определить задачу для входа на хост и запустить 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] [email protected] (~/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. 

Ткань также поддерживает легкие обертки для sudo(), кеширует и работает с ключами SSH и т. Д. И т. Д. Позволяет легко распараллеливать задачи на нескольких хостах и ​​так далее.

+0

@ jarcobi889 проверить пример, который я добавил :) – favoretti

-1

Если этих материалов для работы слишком много, то я могу посмотреть на некоторые конфигурации конфигурации серверов, такие как Ansible.

Я сделал эту любопытную автоматизацию с помощью:

  1. анзибля
  2. Python Ткань
  3. Rake
Смежные вопросы