Яку команду я використовую, щоб побачити, що таке відбиток ключа ECDSA на моєму сервері?


77

Я бачу в усьому Google інформацію про те, як побачити відбиток ключа RSA, але не відбиток ECDSA.

Відповіді:


124

Стривай, я знайшов. Виконайте команду:

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

4
Зверніть увагу, що це буде обчислювати обчислення хешу відбитка пальця у бажаному форматі вашого сервера os. Залежно від локальної ОС вам може знадобитися використовувати старий хеш-формат: ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub Це потрібно, наприклад, при підключенні з ubuntu 12.04 до ubuntu 16.04
Jeff

Це також працює на Mac OS (корисно для перевірки справжності при віддаленому вході в систему).
Хорхе

16

З недавнім ssh (OpenSSH_6.0p1, OpenSSL 1.0.0j, 10 травня 2012 р.), Я написав його так:

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

Примітки:

  • якщо ваш sshd працює на власному порту, додайте команду ' -p portNumber' ssh-keyscan)
  • ssh-keyscanпише далі stderr, а не stdout(!), отже, bashпереспрямування ' 2>&1' (це може змінюватися залежно від вашої оболонки)

Це рядок, який я додав до свого ~/.ssh/known_hostsфайлу, щоб авторизувати запити ssh від localhost для моїх тестів (головним чином для гітоліту, який використовує ssh ).


Даніель Бьомер підтверджує в коментарях :

  • ssh-keyscan надає повний відкритий ключ (и) сервера SSH
  • Вихідні дані ssh-keygenмайже ідентичні формату файлів із відкритим ключем.
    Просто видаліть 1-й стовпець (IP-адреса або ім'я хосту) і збережіть його або передайте до нього, ssh-keygen -lкуди подається відбиток пальця.

Даніель додає:

Показати відбитки всіх відкритих ключів сервера, що зберігаються в ~/.ssh/know_hosts:

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

1
Питання про відбиток пальця ключа. ssh-keyscan надає лише (відкритий) ключ.
алеб

1
Дійсно, ssh-keyscanнадає повний відкритий ключ (и) сервера SSH. У мене є дамп його виводу, і тепер я хочу порівняти це із відбитком пальця, який відображається під sshчас першого підключення. Як це зробити?
Даніель Бемер

Я щойно з’ясував: вихідні дані ssh-keygenмайже ідентичні формату файлів із відкритим ключем. Просто видаліть 1-й стовпець (IP-адреса або ім'я хосту) і збережіть його або передайте до нього, ssh-keygen -lкуди подається відбиток пальця. Я все ще хотів би знати, як зробити sshвідображення повного відкритого ключа сервера при запиті підтвердити його.
Даніель Бемер

@ DanielBöhmer Дякуємо за відгук. Я включив його у відповідь для більшої наочності.
VonC

Показати відбитки пальців усіх відкритих ключів сервера, що зберігаються у ~/.ssh/know_hosts:cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done
Даніель Бемер

8

У моїй системі мені потрібно вказати ключ MD5 замість типового SHA256:

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

Це виведе рядок у форматі, який відповідає помилці, яку я побачив на клієнті.


1
-EПрапор був введений в OpenSSH> 6.6, приблизно в той час , коли перемикання на SHA256 дактилоскопії за замовчуванням. Отже, у випадках, коли клієнт відображає відбитки пальців SHA256, його не можна використовувати для виведення цього формату на сервер.
Вихід із

5

Використані команди

  • Відобразити ascii-art відкритого ключа хосту, що зберігається на сервері (це потрібно робити на стороні сервера, того, до якого ви підключаєтесь через ssh):

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

    -l : Показати відбиток пальця вказаного файлу відкритого ключа.

    -v : візуальний (ascii-art)

    -f : файл

  • Відобразити ascii-art відкритого хост-ключа віддаленого сервера (виконується на стороні клієнта, тієї, яку ви підключаєте FROM через ssh):

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

    -o : варіант

    visualhostkey : visual (ascii-art)

    FingerprintHash : хеш-алго для використання

Що робити, щоб перевірити справжність хосту / сервера

По-перше, 1. слід робити локально на сервері (тому, до якого ви хочете підключитися ДО через ssh): це дасть вам перший ascii-art. Роздрукуйте його або сфотографуйте.

По-друге, 2. має бути зроблено при першому з'єднанні SSH; він покаже друге мистецтво ascii. Якщо ascii-art те саме, тоді ви можете відповісти позитивно на запитання "чи довіряю я?" питання (тобто Are you sure you want to continue connecting (yes/no)).

Приклад

  • Сторона сервера
$ 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..    |
+-----------------+
  • Сторона клієнта
$ 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)? 

Ще якесь пояснення

Перша команда відобразить ascii-art, що відповідає відбитку файлу, який ви вводите. Файл, який ви надаєте як вхід, є загальнодоступним ключем хосту сервера. Коли клієнт підключається (і не лише вперше), сервер надсилає свій відкритий ключ хосту. Цей відкритий ключ хосту буде здійснено пошук у~/.ssh/known_hosts. Якщо відкритий ключ є у файлі, то це нормально: хост (сервер) відомий, тому ми переходимо до наступного кроку для автентифікації користувача (аутентифікація користувача в цій публікації не описана). Якщо відкритого ключа немає у файлі, тоді клієнт обчислить відбиток цього відкритого ключа хосту за допомогою алгоритму хешування (інший алгоритм хешування дасть інший відбиток). Відображається цей попередньо розрахований відбиток пальця (разом із ascii-art, якщо передбачена відповідна опція), і вам доведеться відповісти так чи ні, залежно від того, як ви розпізнаєте цей відбиток або ні (цей відбиток - це зображення / хеш відкритого ключа хосту сервер). Якщо ви скажете "так", тоді до файлу буде додано загальний ключ сервера (а не його відбиток) ~/.ssh/known_hosts.

Ми можемо помітити, що ~/.ssh/known_hostsви знаходитесь у домашньому каталозі (~), оскільки ви довіряєте цьому хосту (серверу), але інший користувач може не довіряти такому самому вам. Крім того, відкритий ключ хоста сервера не залежить від користувача, тому він зберігається в /etc/ssh/.

Друга команда відображатиме відбиток пальця та ascii-art відкритого ключа, отриманого від host_server_to_connect (відповідно до алгоритму хешу, вказаного в опціях). Це те саме, що робити лише ssh, але з більшою кількістю візуальних параметрів, тому зв’язок буде продовжуватися так само, як звичайний зв’язок ssh.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.