ssh: tuşları otomatik olarak kabul et

171

Bu küçük yardımcı program yazdım:

for h in $SERVER_LIST; do ssh $h "uptime"; done

$SERVER_LIST 'ye yeni bir sunucu eklendiğinde, komut şu şekilde durdurulur:

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

yes çalıştım:

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

şanssız.

Herhangi bir yeni anahtarı otomatik olarak kabul etmek için ssh parametrelendirmenin bir yolu var mı?

    
sordu Adam Matan 18.04.2012 11:11

4 cevap

185

StrictHostKeyChecking seçeneğini kullanın, örneğin:

ssh -oStrictHostKeyChecking=no $h uptime

Bu seçenek, ~ / .ssh / config öğesine de eklenebilir, örn .:

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

Ana bilgisayar anahtarları değiştiğinde, bu seçenekle bile bir uyarı alacağınızı unutmayın:

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

Ana makineleriniz genellikle yeniden yüklenmezse, -oUserKnownHostsFile=/dev/null seçeneğiyle bu daha az güvenli (ancak genellikle değişen ana bilgisayar anahtarları için daha uygun) yapabilirsiniz. Bu, alınan tüm ana bilgisayar anahtarlarını atar, böylece hiçbir zaman uyarı üretilmez.

18.04 ile yeni bir olasılık var: StrictHostKeyChecking=accept-new . man 5 ssh_config 'den:

If this flag is set to “accept-new” then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to “no” or “off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.
    
verilen cevap Lekensteyn 18.04.2012 11:29
96

Bir sunucunun parmak izini, bilinen_host'larınıza eklemek için aşağıdaki komutu kullanabilirsiniz

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

NOT: & lt; ip adresi & gt; ve & lt; ana makine adı & gt; eklemek istediğiniz sunucunun IP ve dns adı ile.

Bununla ilgili tek sorun, bilinen iki sunucunuzdaki iki sunucuyla sonuçlanacak olmanızdır. Sadece bahsetme, büyük bir anlaşma değil. Yinelenen olmadığından emin olmak için önce aşağıdakileri çalıştırarak tüm sunucuları kaldırabilirsiniz:

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

Yani koşabilirsin:

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

Sadece yeniden eklemek için çıkarırken akılda tutulması gereken bir şey, parmak izini doğrulama güvenliğini esas olarak kaldırıyor olmanızdır. Bu nedenle, betikinizin her çalıştırılmasından önce kesinlikle bu komut dosyasını çalıştırmak istemezsiniz.

    
verilen cevap mhost 17.10.2013 02:24
23

Bu yanıtla biraz geç kaldım, ancak mantıklı yol, çalışma zamanı toplantısını çalıştırmadan önce yeni makinede bir ssh-keyscan yapmak olacaktır.

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

Kolaylık için akıl kontrolünü devre dışı bırakmak, çevreyi tamamen kontrol altında tuttuğunuzu düşünüyorsanız bile, kötü bir plan gibi ses çıkarır.

    
verilen cevap tink 24.11.2014 20:47
0

Sunucuların bir listesini otomatik olarak eklemek için aşağıdakileri yapabiliriz:

Dosya sunucuları listesine sunucuları IP ekle

IP'ler aşağıdaki biçimde eklenmelidir.

cat servers-list

çıktısı
123.1.2.3
124.1.2.4
123.1.2.5

Sizinkileri değiştirerek IP’lerin üstünü değiştirin.

Aşağıdaki komut, tüm sunucuları listeden ekleyecektir.

ssh-keyscan -p61 -H "'cat servers-list'" >> ~/.ssh/known_hosts
    
verilen cevap Waqas Khan 16.02.2018 08:46

Etiketlerdeki diğer soruları oku