Есть ли альтернатива Clusterssh, pssh и т. Д. Для управления несколькими серверами на основе ssh через один интерфейс?
Одна из слабых сторон Clusterssh заключается в том, что мои серверы используют аутентификацию на основе ключей с паролем для входа в систему, и нет возможности войти на серверы с использованием закрытого ключа.
Есть ли альтернатива, поддерживающая аутентификацию с помощью закрытых ключей?
Сначала определите свои задачи:
from fabric.api import *
@parallel
@hosts('192.168.3.118', '192.168.6.142')
def hostname():
run('hostname')
Затем выполнение через fab
инструмент командной строки:
$ fab -f /path/to/.py/file hostname
[192.168.3.118] Executing task 'hostname'
[192.168.6.142] Executing task 'hostname'
[192.168.6.142] run: hostname
[192.168.3.118] run: hostname
[192.168.6.142] out: SVR040-6142
[192.168.3.118] out: SVR040-3118.localdomain
Done.
Взгляните на Rundeck - http://rundeck.org/
Вы можете сделать все возможное и установить система управления конфигурацией лайк Кукольный или Повар. Вы не упомянули, сколькими узлами вы на самом деле пытаетесь управлять, так что это может быть излишним, но, конечно, вы можете централизованно управлять множеством машин таким образом. Если вы сейчас малы, но растете, вы также можете создать, скажем, Chef, прежде чем вы станете намного больше.
Если вам нужно запускать специальные команды для определенного набора узлов, вы можете сделать что-то вроде knife ssh 'roles:webserver' 'hostname'
(нож - это инструмент командной строки для повара), чтобы запустить hostname
команда для всех узлов, которые имеют роль веб-сервера.
я использую ожидать скрипты для автоматизации входа в систему (особенно потому, что мне нужно пройти через jumb box и войти в chroot, и нужно ввести много паролей) и сделали некоторые "настройки" в конфигурации cssh. Итак, у меня есть этот «основной сценарий» в моей папке bin, который с заданным «именем / псевдонимом сервера» переносит меня на нужный мне сервер.
В ~ / .clusterssh / config я установил параметр «ssh» так, чтобы он указывал на мой скрипт, также «ssh_args» должен быть установлен на какой-то безобидный / поддельный аргумент, потому что cssh имеет список аргументов по умолчанию, если он на самом деле оставлен пустым список по умолчанию попадет в сценарий.
Таким образом, скрипт (в каждом окне / терминале) получит эти аргументы и 1 из аргументов, переданных cssh, скрипт, который он восстанавливает из файла для данного сервера, набор учетных данных и шаги, которые он должен сделать, чтобы прибыть туда, где Я хочу, а затем он вызывает «ожидаемый код» со всеми этими данными.
~ / .clusterssh / config
ssh=/home/user/bin/qs.sh
ssh_args=-a
qs.sh
#!/bin/bash
export PATH=~/bin:$PATH
shift
case $1 in
q4|q5|q6|q7|q8|q9)
essh user1@axt$1
### essh it's some little bash script that does the things I said before and in the end it launches the expect
;;
q1|q2|q3)
essh axtr@axt$1
;;
*)
echo "GOOH"
esac
поэтому я обычно называю это примерно так
# cssh q4 q5 q6 q7
он также работает с "псевдонимами кластера", имеющими кластер "qAll q4 q5 q6 q7", который я могу вызвать с помощью cssh qAll
Надеюсь, это поможет кому-то еще.
я предпочитаю shmux для выполнения одной и той же команды на многих хостах параллельно.
Вы также должны посмотреть на MCollective, что, вероятно, является лучшим и наиболее гибким способом взаимодействия с несколькими серверами в режиме реального времени. Это немного сложная задача для правильной настройки и может быть немного чрезмерной для ваших нужд, но она определенно превосходит pssh, Clusterssh и все другие решения на основе SSH. И как только вы его установите, вы, вероятно, ничего не сможете с ним поделать, если вы немного знакомы с Ruby.
Я задавал себе тот же вопрос, поскольку нахожу зависимость clusterssh от X11 или XQuartz в Mac OS X раздражающей, и, кроме того, окна терминала, открываемые с помощью clusterssh, выглядели уродливее, чем в Terminal.app
Вот так я наткнулся на сценарий на основе tmux от Джорга Джасперта в его блоге: http://blog.ganneff.de/blog/2013/03/tmux---like-screen-just-nicer.html
В основном вы печатаете
tm ms HOST1 user@HOST2
и он открывает сеанс с одним окном tmux, состоящим из двух панелей
Приглашение bash работает для простых вещей:
составьте список серверов в файле servers.txt, по одной строке на сервер.
затем сделайте:
$ while read $server; do ssh user@$server "command args"; done < servers.txt