GNU/Linux >> Znalost Linux >  >> Linux

Jaký příkaz mám použít, abych zjistil, jaký je otisk klíče ECDSA mého serveru?

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 ' na ssh-keyscan příkaz)
  • ssh-keyscan zapisuje na stderr , nikoli stdout (!), proto bash 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 na ssh-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

Linux
  1. Pomocí terminálu Linux můžete zjistit, jaké soubory jsou ve vašem počítači

  2. Jak používat Linuxový příkaz grep

  3. Jaké je použití $# v Bash

  1. Jak používat příkaz historie v Linuxu

  2. Jak používat příkaz basename?

  3. Jak používat příkaz ssh-keygen ke konfiguraci ssh bez hesla

  1. Jak používat příkaz historie Linuxu

  2. Jak používat příkaz ssh-keygen v Linuxu

  3. Jaké je použití volby -o v příkazu useradd?