Сегодня решаем простую задачу — выполнение одной команды на нескольких серверах одновременно. В качестве примера попробуем узнать uptime нескольких машин. Воспользуемся для этого утилитой pssh. Для CentOS пакет с утилитой доступен в EPEL репозитории. Устанавливаем её командой (в зависимости от ОС):
yum install pssh apt-get install pssh dnf install pssh
Создаём файл со списком серверов, с которыми мы будем работать. Выглядеть он будет следующим образом (2222 — это SSH порт):
$ cat ./hosts.pssh uptime@bob.sysadmin.pm:2222 uptime@alice.sysadmin.pm:2222
Если на серверах настроен доступ по ключам, то для получения аптайма одной командой мы будем делать вот так:
$ pssh -i -h ./hosts.pssh uptime
Но если ключа у нас не настроено, а автоматизировать процесс хочется, то можно воспользоваться утилитой sshpass. Вместе с ней, pssh нужно запускать с ключом -A:
$ sshpass -p superpassword pssh -A -i -h ./hosts.pssh uptime Warning: do not enter your password if anyone else has superuser privileges or access to your account. [1] 22:01:24 [SUCCESS] uptime@bob.sysadmin.pm:2222 22:01:24 up 9 days, 20:57, 2 users, load average: 3,03, 3,27, 3,29 [2] 22:01:25 [SUCCESS] uptime@alice.sysadmin.pm:2222 22:01:25 up 11 days, 15:35, 1 user, load average: 2,20, 2,21, 2,30
Если бы у нас не использовался sshpass, то при доступе к каждому из серверов, утилита попросила бы нас ввести пароль для доступа, однако в нашем случае, пароль программе передаётся автоматически.
Разумеется, нельзя не отметить серьёзный минус такого подхода — у пользователей, которыми мы выполняем авторизацию на серверах, пароль должен быть одинаковым.
Ещё одна задача, которая с помощью pssh решается очень легко — это копирование одного файла сразу на несколько серверов, делается это командой:
$ pscp.pssh -h ./hosts.pssh ./test12345.txt /tmp/
Либо, при использовании sshpass:
$ sshpass -p superpassword pscp.pssh -A -h ./hosts.pssh ./test12345.txt /tmp/ Warning: do not enter your password if anyone else has superuser privileges or access to your account. [1] 21:41:34 [SUCCESS] uptime@bob.sysadmin.pm:2222 [2] 21:41:39 [SUCCESS] uptime@alice.sysadmin.pm:2222
pssh — это удобная утилита для решения простых, разовых задач. Однако если администратору необходимо регулярно централизованно работать с большим количеством серверов одновременно, имеет смысл сразу же перейти к использованию, например, Ansible.