Daripada mengetikkan kata sandi Anda beberapa kali, Anda dapat menggunakan pssh
dan -A
beralih untuk meminta kata sandi sekali, dan kemudian memasukkan kata sandi ke semua server dalam daftar.
CATATAN: Menggunakan metode ini tidak memungkinkan Anda untuk menggunakan ssh-copy-id
, jadi Anda harus menggulung metode Anda sendiri untuk menambahkan file kunci pub SSH Anda ke file akun jarak jauh Anda ~/.ssh/authorized_keys
.
Contoh
Berikut ini contoh yang berfungsi:
$ 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
Skrip di atas umumnya terstruktur seperti:
$ cat <pubkey> | pssh -h <ip file> -l <remote user> -A -I -i '...cmds to add pubkey...'
pssh
Detail tingkat tinggi
cat <pubkey>
menghasilkan file kunci publik pssh
pssh
menggunakan -I
peralihan untuk menelan data melalui STDIN
-l <remote user>
adalah akun server jarak jauh (kami mengasumsikan Anda memiliki nama pengguna yang sama di seluruh server dalam file IP)
-A
memberitahu pssh
untuk meminta kata sandi Anda dan kemudian menggunakannya kembali untuk semua server yang terhubung
-i
memberitahu pssh
untuk mengirim output ke STDOUT daripada menyimpannya dalam file (perilaku default-nya)
'...cmds to add pubkey...'
- ini adalah bagian tersulit dari apa yang terjadi, jadi saya akan memecah ini dengan sendirinya (lihat di bawah)
Perintah dijalankan di server jarak jauh
Ini adalah perintah yang pssh
akan dijalankan di setiap server:
' \
umask 077; \
mkdir -p ~/.ssh; \
afile=~/.ssh/authorized_keys; \
cat - >> $afile; \
sort -u $afile -o $afile \
'
Dalam urutan:
atur umask pengguna jarak jauh ke 077, ini agar direktori atau file apa pun yang akan kita buat, akan memiliki izinnya diatur seperti:
$ 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
buat direktori ~/.ssh
dan abaikan peringatan kami jika sudah ada di sana
- setel variabel
$afile
,, dengan path ke file Authorized_keys
cat - >> $afile
- ambil input dari STDIN dan tambahkan ke file otor_keys
sort -u $afile -o $afile
- secara unik mengurutkan file otor_keys dan menyimpannya
CATATAN: Bit terakhir itu adalah untuk menangani case di mana Anda menjalankan beberapa kali di atas terhadap server yang sama. Ini akan menghilangkan pubkey Anda dari ditambahkan beberapa kali.
Perhatikan kutu tunggal!
Juga berikan perhatian khusus pada fakta bahwa semua perintah ini bersarang di dalam tanda kutip tunggal. Itu penting, karena kami tidak ingin $afile
dievaluasi sampai setelah dijalankan di server jauh.
' \
..cmds... \
'
Saya telah memperluas di atas sehingga lebih mudah untuk membaca di sini, tetapi saya biasanya menjalankan semuanya pada satu baris seperti ini:
$ 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'
Materi bonus
Dengan menggunakan pssh
Anda dapat melupakan harus membuat file dan menyediakan konten dinamis menggunakan -h <(...some command...)
atau Anda dapat membuat daftar IP menggunakan pssh
switch lain -H "ip1 ip2 ip3"
,.
Sebagai contoh:
$ cat .... | pssh -h <(grep -A1 dp15 ~/.ssh/config | grep -vE -- '#|--') ...
Di atas dapat digunakan untuk mengekstrak daftar IP dari ~/.ssh/config
file saya . Tentu saja Anda juga dapat menggunakan printf
untuk menghasilkan konten dinamis:
$ cat .... | pssh -h <(printf "%s\n" srv0{0..9}) ....
Sebagai contoh:
$ printf "%s\n" srv0{0..9}
srv00
srv01
srv02
srv03
srv04
srv05
srv06
srv07
srv08
srv09
Anda juga dapat menggunakan seq
untuk menghasilkan urutan angka yang diformat juga!
Referensi & alat serupa untuk pssh
Jika Anda tidak ingin menggunakan pssh
seperti yang saya lakukan di atas, ada beberapa opsi lain yang tersedia.