U mojego boku dzieje się to z powodu czegoś, co uważam za błąd ssh
nowszych (od OpenSSH_7.9p1
) klientów, kiedy próbuje nauczyć się bardziej bezpiecznego klucza serwera ecdsa
, gdzie jest już znany starszy klucz typu rsa
. Następnie przedstawia ten mylący komunikat!
Nie znam dobrej poprawki do tego, jedyne obejście jakie znalazłem to usunięcie wszystkich “dobrych ale starych kluczy rsa
” tak, aby klient mógł ponownie nauczyć się “nowych bezpieczniejszych kluczy ecdsa
”. Tak więc:
Pierwszym krokiem jest usunięcie wszystkich starych, dobrych kluczy RSA ( Ostrzeżenie! To traci ochronę przed MitM ):
Drugim krokiem jest ponowne nauczenie się wszystkich kluczy hosta, co należy zrobić ręcznie, łącząc się z każdym IP ponownie za pomocą ssh
.
Oto co obserwuję:
$ sftp test@136.243.197.100
Connected to test@136.243.197.100
sftp>
$ sftp test@valentin.hilbig.de
Connected to test@valentin.hilbig.de.
sftp>
Teraz spróbuj połączyć się z nowo wprowadzonym aliasem tego samego już znanego dobrego serwera:
$ sftp test@gcopy.net
Warning: the ECDSA host key for 'gcopy.net' differs from the key for the IP address '136.243.197.100'
Offending key for IP in /home/test/.ssh/known_hosts:45
Matching host key in /home/test/.ssh/known_hosts:44
Are you sure you want to continue connecting (yes/no)?
Proszę spojrzeć na adres IP. Jest to ten sam adres IP co powyżej! Więc wygląda na to, że (dobry) klucz (znany) IP nagle się obraża (nie jest, ponieważ klient ssh
miesza dwa niekompatybilne klucze, patrz poniżej).
Teraz spróbujmy to naprawić:
$ ssh-keygen -R 136.243.197.100
# Host 136.243.197.100 found: line 45
/home/test/.ssh/known_hosts updated.
Original contents retained as /home/test/.ssh/known_hosts.old
Spróbujmy jeszcze raz:
$ sftp test@gcopy.net
Warning: Permanently added the ECDSA host key for IP address '136.243.197.100' to the list of known hosts.
Connected to test@gcopy.net.
$ sftp test@valentin.hilbig.de
Warning: the RSA host key for 'valentin.hilbig.de' differs from the key for the IP address '136.243.197.100'
Offending key for IP in /home/test/.ssh/known_hosts:45
Matching host key in /home/test/.ssh/known_hosts:10
Are you sure you want to continue connecting (yes/no)?
WTF? Co tu się stało? Nowy, świeży klucz wyuczony z serwera znowu uległ awarii? A problem nawet zmienił strony?!?
Nie, to nie jest ani klucz, ani serwer. Wszystko jest prawidłowe!
To klient ssh
, który nie zweryfikował prawidłowego klucza! Wpis 45
w known_hosts
teraz nosi klucz typu ecdsa-sha2-nistp256
, podczas gdy klucz, który został wyciągnięty z serwera przez klienta, jest typu rsa-sha2-512
(i dlatego nie może pasować do drugiego klucza!).
$ sftp -v test@valentin.hilbig.de
pokazuje:
debug1: kex: host key algorithm: rsa-sha2-512
podczas
$ sftp -v test@gcopy.net
pokazuje:
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
Najwyraźniej klient ssh
ma gdzieś błąd! To nie może poradzić sobie z kluczem hosta istniejącego w więcej niż jednym wariancie! Albo wpada w pułapkę, aby zażądać przestarzałego wariantu klucza.
Jak naprawić?
Naprawdę nie mam pojęcia. To prawdopodobnie można naprawić tylko w górę rzeki.
Ale jest ręczna, ale niezdarna robota:
Trzeba ręcznie usunąć wszystkie ślady starego klucza typu rsa
. Klucz, o którym mowa jest pokazany na wyjściu, ale nie jest bezpośrednio oznaczony jako problem:
Warning: the RSA host key for 'valentin.hilbig.de' differs from the key for the IP address '136.243.197.100'
Offending key for IP in /home/test/.ssh/known_hosts:45
Matching host key in /home/test/.ssh/known_hosts:10
check:
awk 'NR==45 { print $2 }' /home/test/.ssh/known_hosts
awk 'NR==10 { print $2 }' /home/test/.ssh/known_hosts
daje
ecdsa-sha2-nistp256
ssh-rsa
Więc tutaj dopasowany klucz hosta jest tym obraźliwym, a klucz obraźliwy jest tym właściwym, który musi być zachowany! Więc usuńmy ten niewłaściwy (pasujący):
ssh-keygen -R valentin.hilbig.de
# Host valentin.hilbig.de found: line 10
/home/test/.ssh/known_hosts updated.
Original contents retained as /home/test/.ssh/known_hosts.old
Teraz sprawdźmy jeszcze raz:
$ sftp test@valentin.hilbig.de
The authenticity of host 'valentin.hilbig.de (136.243.197.100)' can't be established.
ECDSA key fingerprint is SHA256:tf7lwe10C2p1lK2UG9p//m/4sUBCpX+i9k5Ub63c6Os.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'valentin.hilbig.de' (ECDSA) to the list of known hosts.
Connected to test@valentin.hilbig.de.
sftp>
$ sftp test@gcopy.net
Connected to test@gcopy.net.
sftp>
sftp test@136.243.197.100
Connected to test@136.243.197.100.
sftp>
YAY! Problem w końcu zniknął. Ale z kilkoma 100 wpisami w .ssh/known_hosts
, to “rozwiązanie” naprawdę staje się poważnym PITA (i Error Prone Security Nightmare na Elm Street. YMMV).