Замість того, щоб вводити свій пароль кілька разів, ви можете скористатися psshі його -Aперемикачем, щоб запросити його один раз, а потім подати пароль до всіх серверів у списку.
ПРИМІТКА. Використання цього методу не дозволяє використовувати ssh-copy-id, однак, вам знадобиться прокрутити свій власний метод для додавання файлу ключа SSH pub до файлу віддаленого облікового запису ~/.ssh/authorized_keys.
Приклад
Ось приклад, який виконує цю роботу:
$ cat ~/.ssh/my_id_rsa.pub \
| pssh -h ips.txt -l remoteuser -A -I -i \
' \
umask 077; \
mkdir -p ~/.ssh; \
afile=~/.ssh/authorized_keys; \
cat - >> $afile; \
sort -u $afile -o $afile \
'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 23:03:58 [SUCCESS] 10.252.1.1
[2] 23:03:58 [SUCCESS] 10.252.1.2
[3] 23:03:58 [SUCCESS] 10.252.1.3
[4] 23:03:58 [SUCCESS] 10.252.1.10
[5] 23:03:58 [SUCCESS] 10.252.1.5
[6] 23:03:58 [SUCCESS] 10.252.1.6
[7] 23:03:58 [SUCCESS] 10.252.1.9
[8] 23:03:59 [SUCCESS] 10.252.1.8
[9] 23:03:59 [SUCCESS] 10.252.1.7
Наведений вище сценарій загалом структурований так:
$ cat <pubkey> | pssh -h <ip file> -l <remote user> -A -I -i '...cmds to add pubkey...'
psshДеталі високого рівня
cat <pubkey> виводить файл відкритого ключа в pssh
psshвикористовує -Iперемикач для прийому даних через STDIN
-l <remote user> - це обліковий запис віддаленого сервера (ми припускаємо, що у вас в сервері IP-файлу однакове ім’я користувача на серверах)
-Aповідомляє psshзапитати ваш пароль, а потім повторно використовувати його для всіх серверів, до яких він підключається
-iповідомляє psshнадсилати будь-який вихід до STDOUT, а не зберігати його у файлах (його поведінка за замовчуванням)
'...cmds to add pubkey...'- це найскладніша частина того, що відбувається, тому я розберу це сам по собі (див. нижче)
Команди, що виконуються на віддалених серверах
Це команди, які psshвиконуватимуться на кожному сервері:
' \
umask 077; \
mkdir -p ~/.ssh; \
afile=~/.ssh/authorized_keys; \
cat - >> $afile; \
sort -u $afile -o $afile \
'
В порядку:
встановіть віддалений користувачу umask на 077, це так, що всі довідники або файли, які ми збираємось створити, матимуть свої дозволи відповідно встановлені так:
$ ls -ld ~/.ssh ~/.ssh/authorized_keys
drwx------ 2 remoteuser remoteuser 4096 May 21 22:58 /home/remoteuser/.ssh
-rw------- 1 remoteuser remoteuser 771 May 21 23:03 /home/remoteuser/.ssh/authorized_keys
створити каталог ~/.sshі ігнорувати попередження нас, якщо воно вже є
- встановити змінну,
$afileіз шляхом до файлу санкціонованих_ ключів
cat - >> $afile - взяти вхід зі STDIN та додати до файла дозволених ключів
sort -u $afile -o $afile - однозначно сортує файл санкціонованого_кейса та зберігає його
ПРИМІТКА. Останнім бітом є обробка випадку, коли ви запускаєте вищезазначені кілька разів на одних і тих же серверах. Це дозволить уникнути додавання вашого віскі кілька разів.
Помітьте одиночні кліщі!
Також зверніть особливу увагу на те, що всі ці команди вкладені всередині одиничних лапок. Це важливо, оскільки ми не хочемо $afileотримувати оцінку до того моменту, як це буде виконано на віддаленому сервері.
' \
..cmds... \
'
Я розширив вищезазначене, тому тут простіше читати, але я, як правило, запускаю все в одному рядку так:
$ cat ~/.ssh/my_id_rsa.pub | pssh -h ips.txt -l remoteuser -A -I -i 'umask 077; mkdir -p ~/.ssh; afile=~/.ssh/authorized_keys; cat - >> $afile; sort -u $afile -o $afile'
Бонусний матеріал
За допомогою psshви можете відмовитися від того , щоб побудувати файли і або забезпечити динамічний вміст , використовуючи -h <(...some command...)або ви можете створити список IP - адреси з допомогою інших psshперемикачів «s, -H "ip1 ip2 ip3".
Наприклад:
$ cat .... | pssh -h <(grep -A1 dp15 ~/.ssh/config | grep -vE -- '#|--') ...
Вищезгадане може бути використане для отримання списку IP-адрес із мого ~/.ssh/configфайлу. Звичайно, ви також можете використовувати printfдля створення динамічного вмісту:
$ cat .... | pssh -h <(printf "%s\n" srv0{0..9}) ....
Наприклад:
$ printf "%s\n" srv0{0..9}
srv00
srv01
srv02
srv03
srv04
srv05
srv06
srv07
srv08
srv09
Ви також можете використовувати seqдля генерування форматованих послідовностей чисел!
Посилання та подібні інструменти до pssh
Якщо ви не хочете використовувати так, psshяк я це робив вище, доступні інші варіанти.