Aksine tip daha şifreniz birden çok kez sen yararlanabilir pssh
ve -A
bir kez bunun için istemi anahtarı ve sonra listedeki tüm sunuculara şifreyi beslenirler.
NOT: Bu yöntemi kullanmak ssh-copy-id
, kullanmanıza izin vermez , bu nedenle, SSH pub anahtar dosyanızı uzak hesabınızın dosyasına eklemek için kendi yönteminizi kullanmanız gerekir ~/.ssh/authorized_keys
.
Örnek
İşte işi yapan bir örnek:
$ 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
Yukarıdaki komut dosyası genellikle şöyle yapılandırılmıştır:
$ cat <pubkey> | pssh -h <ip file> -l <remote user> -A -I -i '...cmds to add pubkey...'
Yüksek seviye pssh
detaylar
cat <pubkey>
ortak anahtar dosyasını çıktılar pssh
pssh
-I
STDIN üzerinden veri almak için bu anahtarı kullanır
-l <remote user>
Uzak sunucunun hesabı (IP dosyasındaki sunucularda aynı kullanıcı adına sahip olduğunuzu varsayıyoruz)
-A
söyler pssh
şifreniz ve sonra bağlanır hepsi sunucular için yeniden kullanmak
-i
pssh
herhangi bir çıktının dosyalarda saklamak yerine STDOUT'a göndermesini söyler (varsayılan davranışı)
'...cmds to add pubkey...'
- bu olan bitenin en zor kısmı, bu yüzden bunu kendi başıma çözeceğim (aşağıya bakınız)
Komutlar uzak sunucularda çalıştırılıyor
pssh
Her sunucuda çalışacak komutlar şunlardır :
' \
umask 077; \
mkdir -p ~/.ssh; \
afile=~/.ssh/authorized_keys; \
cat - >> $afile; \
sort -u $afile -o $afile \
'
Sırayla:
uzak kullanıcının umask değerini 077 olarak ayarlayın, bu, yaratacağımız herhangi bir dizin veya dosyanın izinlerini buna göre ayarlayacağı şekilde olacaktır:
$ 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
dizini yaratın ~/.ssh
ve zaten varsa, bizi uyarmasını önemsemeyin
- bir değişken ayarlamak
$afile
authorized_keys dosyasına yolu ile
cat - >> $afile
- STDIN’den girdi alın ve onaylanmış_key dosyası ekleyin
sort -u $afile -o $afile
- benzersiz olarak legal_keys dosyasını sıralar ve kaydeder
NOT: Bu son bit, aynı sunuculara karşı yukarıdakileri birden çok kez çalıştırdığınız durumu ele almaktır. Bu, pubkey anahtarınızın birden fazla kez eklenmesini engeller.
Tek kenelere dikkat edin!
Ayrıca, tüm bu komutların tekli tırnak içine alınmış olmasına dikkat edin. Bu önemlidir, çünkü $afile
uzak sunucuda yürütülene kadar değerlendirilmek istemiyoruz .
' \
..cmds... \
'
Yukarıdakileri genişlettim, bu yüzden burada okumak daha kolay, ancak genellikle hepsini şöyle tek satırda çalıştırıyorum:
$ 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'
Bonus malzemesi
Kullanarak pssh
dosyaları oluşturmak zorunda kalmayı bırakabilir ve ya kullanarak dinamik içerik sunabilir ya -h <(...some command...)
da başka birinin pssh
anahtarlarını kullanarak bir IP listesi oluşturabilirsiniz -H "ip1 ip2 ip3"
.
Örneğin:
$ cat .... | pssh -h <(grep -A1 dp15 ~/.ssh/config | grep -vE -- '#|--') ...
Yukarıdakiler, dosyamdan bir IP listesi çıkarmak için kullanılabilir ~/.ssh/config
. Elbette printf
dinamik içerik oluşturmak için de kullanabilirsiniz :
$ cat .... | pssh -h <(printf "%s\n" srv0{0..9}) ....
Örneğin:
$ printf "%s\n" srv0{0..9}
srv00
srv01
srv02
srv03
srv04
srv05
srv06
srv07
srv08
srv09
Ayrıca seq
biçimlendirilmiş sayı dizileri oluşturmak için de kullanabilirsiniz !
Referanslar ve benzeri araçlar pssh
pssh
Yukarıda yaptığım gibi kullanmak istemiyorsanız, mevcut başka seçenekler de var.