Použité příkazy
-
Zobrazte ascii-art veřejného klíče hostitele uloženého na serveru (provádí se na straně serveru, ke kterému se připojujete přes ssh):
ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
-l :Zobrazit otisk zadaného souboru veřejného klíče.
-v :vizuální (ascii-art)
-f :soubor
-
Zobrazte ascii-art veřejného klíče hostitele vzdáleného serveru (provádí se na straně klienta, tedy toho, ze kterého se připojujete přes ssh):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-o :možnost
visualhostkey :vizuální (ascii-art)
FingerprintHash :hash algo k použití
Jak zkontrolovat pravost hostitele/serveru
Za prvé, 1. je třeba provést lokálně na serveru (ten, ke kterému se chcete připojit přes ssh ):poskytne vám to první ascii-art. Vytiskněte nebo vyfoťte.
Za druhé, 2. se má provést při prvním připojení SSH; zobrazí druhý ascii-art. Pokud je ascii-art stejný, můžete odpovědět ano na "Důvěřuji?" otázka (tj. Are you sure you want to continue connecting (yes/no)
).
Příklad
- Na straně serveru
$ ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6 (ECDSA)
+--[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+-----------------+
- Na straně klienta
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| . |
|o o |
| o + . |
| o o . |
| . + S . . |
| + . . . o |
| . .o ..o o |
| ooo....+ |
| o= . E.. |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)?
Další vysvětlení
První příkaz zobrazí ascii-art odpovídající otisku souboru, který zadáte jako vstup. Soubor, který zadáte jako vstup, je veřejným hostitelem klíč serveru. Když se klient připojí (nejen poprvé), server odešle svůj veřejný hostitelský klíč. Tento veřejný klíč hostitele bude prohledán v ~/.ssh/known_hosts
. Pokud je veřejný klíč v souboru, pak je to v pořádku:hostitel (server) je znám, takže přejdeme k dalšímu kroku autentizace uživatele (autentizace uživatele není v tomto příspěvku popsána). Pokud veřejný klíč není v souboru, pak klient vypočítá otisk tohoto veřejného hostitelského klíče pomocí algoritmu hash (jiný algoritmus hash poskytne jiný otisk). Tento dříve vypočítaný otisk prstu se zobrazí (spolu s ascii-art, pokud je k dispozici odpovídající možnost) a budete muset odpovědět ano nebo ne v závislosti na tom, zda tento otisk rozpoznáváte nebo ne (tento otisk je obrázek/hash veřejného klíče hostitele server). Pokud řeknete ano, pak bude do souboru ~/.ssh/known_hosts
přidán bublic klíč serveru (nikoli jeho otisk). .
Můžeme si všimnout, že ~/.ssh/known_hosts
je pod vaším domovským (~) adresářem, protože vy důvěřovat tomuto hostiteli (serveru), ale jiný uživatel nemusí důvěřovat stejnému jako vy. Veřejný klíč hostitele serveru také není závislý na uživateli, takže je uložen v /etc/ssh/
.
Druhý příkaz zobrazí otisk prstu a ascii-art veřejného klíče přijatého z host_server_to_connect (podle hash algo uvedeného v možnostech). Je to stejné, jako byste dělali pouze ssh, ale s více vizuálními možnostmi, takže připojení bude pokračovat stejným způsobem jako normální připojení ssh.
V mém systému musím zadat klíč MD5 namísto výchozího SHA256:
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
Tento výstup obsahuje řetězec ve formátu, který odpovídá chybě, kterou jsem viděl na klientovi.
Počkej, našel jsem to. Spusťte příkaz:
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
S nedávným ssh (OpenSSH_6.0p1, OpenSSL 1.0.0j 10. května 2012) jsem to naskriptoval takto:
ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=
Poznámky:
- Pokud váš sshd běží na vlastním portu, přidejte '
-p portNumber
' nassh-keyscan
příkaz) ssh-keyscan
zapisuje nastderr
, nikolistdout
(!), protobash
přesměrování '2>&1
' (to se může lišit v závislosti na vašem shellu)
To je řádek, který jsem přidal do svého ~/.ssh/known_hosts
za účelem autorizace požadavků ssh z localhost pro mé testy (hlavně pro gitolite, který používá ssh).
Daniel Böhmer v komentářích potvrzuje:
ssh-keyscan
poskytuje úplný veřejný klíč (klíče) serveru SSH- výstup
ssh-keygen
je téměř identický s formátem souborů veřejného klíče.
Stačí odstranit 1. sloupec (IP adresu nebo název hostitele) a uložit jej nebo jej převést nassh-keygen -l
který představuje otisk prstu.
Daniel dodává:
Zobrazit otisky všech veřejných klíčů serveru uložených v
~/.ssh/know_hosts
:
cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done