Welke opdracht gebruik ik om te zien wat de ECDSA-sleutelvingerafdruk van mijn server is?

Ik zie overal op Google dingen over hoe ik de vingerafdruk van de RSA-sleutel kan zien, maar niet de ECDSA-vingerafdruk.


Antwoord 1, autoriteit 100%

Wacht, ik heb het gevonden. Voer de opdracht uit:

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

Antwoord 2, autoriteit 12%

Met een recente ssh (OpenSSH_6.0p1, OpenSSL 1.0.0j 10 mei 2012), heb ik het als volgt gescript:

ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=

Opmerkingen:

  • als uw sshd op een aangepaste poort draait, voegt u ‘-p portNumber‘ toe aan de opdracht ssh-keyscan)
  • ssh-keyscanschrijft op stderr, niet op stdout(!), vandaar de bashomleiding ‘2>&1‘ (dat kan variëren afhankelijk van je shell)

Dat is de regel die ik aan mijn ~/.ssh/known_hosts-bestand heb toegevoegd om ssh-verzoeken van localhost voor mijn tests te autoriseren (voornamelijk voor gitolite, die ssh gebruikt).


Daniel Böhmerbevestigt in de opmerkingen:

  • ssh-keyscanlevert de volledige openbare sleutel(s) van de SSH-server
  • de uitvoer van ssh-keygenis bijna identiek aan de indeling van de openbare-sleutelbestanden.
    Verwijder gewoon de eerste kolom (IP-adres of hostnaam) en sla die op of pijp deze naar ssh-keygen -ldie de vingerafdruk presenteert.

Daniel voegt toe:

Laat vingerafdrukken zien van alle openbare serversleutels die zijn opgeslagen in ~/.ssh/know_hosts:

cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done

Antwoord 3, autoriteit 8%

Gebruikte commando’s

  • Geef ascii-art weer van de openbare hostsleutel die op de server is opgeslagen (dit moet worden gedaan aan de serverzijde, degene waarmee u verbinding maakt via ssh):

    ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
    

    -l: vingerafdruk van gespecificeerd bestand met openbare sleutel weergeven.

    -v: visueel (ascii-art)

    -f: bestand

  • Toon ascii-art van de openbare hostsleutel van de externe server (moet worden gedaan aan de clientzijde, degene die u verbindt VANAF via ssh):

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
    

    -o: optie

    visualhostkey: visual (ascii-art)

    FingerprintHash: hash-algo om te gebruiken

Wat te doen om de authenticiteit van een host/server te controleren

Eerst moet 1. lokaal op de server worden gedaan (degene waarmee u via ssh wilt verbinden): het geeft u een eerste ascii-art. Druk het af of maak een foto.

Ten tweede moet 2. worden gedaan bij de eerste SSH-verbinding; het zal een tweede ascii-art weergeven. Als de ascii-art hetzelfde is, dan kun je jaantwoorden op de “do I trust?”vraag (dwz Are you sure you want to continue connecting (yes/no)).

Voorbeeld

  • Serverzijde
$ 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..    |
+-----------------+
  • Klantzijde
$ 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)? 

Wat meer uitleg

De eerste opdracht geeft de ascii-art weer die overeenkomt met de vingerafdruk van het bestand dat u als invoer geeft. Het bestand dat u als invoer geeft, is de openbare host-sleutel van de server. Wanneer een client verbinding maakt (niet alleen voor de eerste keer), zal de server zijn openbare hostsleutel verzenden. Deze openbare hostsleutel wordt doorzocht in ~/.ssh/known_hosts. Als de openbare sleutel zich in het bestand bevindt, is het goed: de host (server) is bekend, dus we gaan verder met de volgende stap om de gebruiker te authenticeren (gebruikersauthenticatie wordt niet beschreven in dit bericht). Als de openbare sleutel niet in het bestand staat, berekent de client de vingerafdruk van deze openbare hostsleutel met een hash-algoritme (een andere hash-algo geeft een andere vingerafdruk). Deze eerder berekende vingerafdruk wordt weergegeven (samen met de ascii-art indien de overeenkomstige optie wordt geboden) en u zult ja of nee moeten antwoorden, afhankelijk van of u deze vingerafdruk herkent of nee (deze vingerafdruk is de afbeelding/hash van de openbare hostsleutel van de server). Als u ja zegt, wordt de bublic-sleutel van de server (niet zijn vingerafdruk) toegevoegd aan het bestand ~/.ssh/known_hosts.

We kunnen zien dat ~/.ssh/known_hostszich onder je home (~) directory bevindt, omdat jedeze host (server) vertrouwt, maar een andere gebruiker kan niet hetzelfde vertrouwen als jij. Ook is de openbare hostsleutel van de server niet gebruikersafhankelijk, dus wordt deze opgeslagen in /etc/ssh/.

De tweede opdracht toont de vingerafdruk en de ascii-art van de openbare sleutel die is ontvangen van de host_server_to_connect(volgens de hash-algo gegeven in opties). Het is hetzelfde als alleen ssh doen, maar met meer visuele opties, dus de verbinding zal op dezelfde manier doorgaan als een normale ssh-verbinding.


Antwoord 4, autoriteit 6%

Op mijn systeem moet ik een MD5-sleutel opgeven in plaats van de standaard SHA256:

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub

Hiermee wordt een tekenreeks uitgevoerd in een indeling die overeenkomt met de fout die ik op de client heb gezien.

Other episodes