ssh: automatycznie akceptuje klucze

174

Napisałem ten mały skrypt narzędziowy:

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

Kiedy nowy serwer zostanie dodany do $SERVER_LIST , skrypt zatrzyma się za pomocą:

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)?

Próbowałem yes :

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

bez powodzenia.

Czy istnieje sposób na parametryzację ssh , aby automatycznie akceptował nowy klucz?

    
zadawane Adam Matan 18.04.2012, 11:11
źródło

4 odpowiedzi

190

Użyj opcji StrictHostKeyChecking, na przykład:

ssh -oStrictHostKeyChecking=no $h uptime

Ta opcja może być również dodana do ~ / .ssh / config, np .:

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

Pamiętaj, że po zmianie kluczy hosta otrzymasz ostrzeżenie, nawet z tą opcją:

$ 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

Jeśli twoje hosty nie są często ponownie instalowane, możesz uczynić to mniej bezpiecznym (ale wygodniejszym w przypadku często zmieniających się kluczy hosta) z opcją -oUserKnownHostsFile=/dev/null . Odrzuca wszystkie otrzymane klucze hosta, więc nigdy nie wygeneruje ostrzeżenia.

Wraz z 18.04 pojawia się nowa możliwość: StrictHostKeyChecking=accept-new . Z man 5 ssh_config :

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.
    
odpowiedział Lekensteyn 18.04.2012, 11:29
źródło
98

Możesz użyć następującego polecenia, aby dodać odcisk palca serwera do znanych_hostów

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

UWAGA: Zamień < adres ip > i < nazwa hosta > z nazwą IP i dns serwera, który chcesz dodać.

Jedynym problemem jest to, że dwa razy trafisz na kilka serwerów w twoich znanych serwerach. To naprawdę nie jest wielka sprawa, tylko wspomnienie. Aby upewnić się, że nie ma duplikatów, możesz najpierw usunąć wszystkie serwery, wykonując najpierw następujące czynności:

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

Możesz więc uruchomić:

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

Jedną z rzeczy, o której należy pamiętać podczas usuwania w celu ponownego dodania, jest zasadniczo usunięcie zabezpieczenia weryfikacji odcisku palca. Więc na pewno nie chcesz uruchamiać tego skryptu przed każdym wykonaniem skryptu narzędziowego.

    
odpowiedział mhost 17.10.2013, 02:24
źródło
23

Trochę się spóźniłem z tą odpowiedzią, ale rozsądnym sposobem byłoby zrobienie ssh-keyscan na nowej maszynie przed uruchomieniem zbierania uptime.

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

Wyłączenie sprawdzania poprawności dla wygody wydaje się złym planem, nawet jeśli uważasz, że całkowicie kontrolujesz środowisko.

    
odpowiedział tink 24.11.2014, 20:47
źródło
0

Aby automatycznie dodać listę serwerów, poniżej:

Dodaj adresy IP serwerów na liście serwerów plików

Adresy IP powinny zostać dodane w poniższym formacie.

Wynik cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

Zmień powyższe adresy IP, zastępując swoje.

Poniższe polecenie doda wszystkie serwery z listy.

ssh-keyscan -p61 -H "'cat servers-list'" >> ~/.ssh/known_hosts
    
odpowiedział Waqas Khan 16.02.2018, 08:46
źródło

Przeczytaj inne pytania na temat tagów