Я бачу в усьому Google інформацію про те, як побачити відбиток ключа RSA, але не відбиток ECDSA.
Відповіді:
Стривай, я знайшов. Виконайте команду:
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
З недавнім ssh (OpenSSH_6.0p1, OpenSSL 1.0.0j, 10 травня 2012 р.), Я написав його так:
ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=
Примітки:
-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
ssh-keyscan
надає повний відкритий ключ (и) сервера SSH. У мене є дамп його виводу, і тепер я хочу порівняти це із відбитком пальця, який відображається під ssh
час першого підключення. Як це зробити?
ssh-keygen
майже ідентичні формату файлів із відкритим ключем. Просто видаліть 1-й стовпець (IP-адреса або ім'я хосту) і збережіть його або передайте до нього, ssh-keygen -l
куди подається відбиток пальця. Я все ще хотів би знати, як зробити ssh
відображення повного відкритого ключа сервера при запиті підтвердити його.
~/.ssh/know_hosts
:cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done
У моїй системі мені потрібно вказати ключ MD5 замість типового SHA256:
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
Це виведе рядок у форматі, який відповідає помилці, яку я побачив на клієнті.
-E
Прапор був введений в OpenSSH> 6.6, приблизно в той час , коли перемикання на SHA256 дактилоскопії за замовчуванням. Отже, у випадках, коли клієнт відображає відбитки пальців SHA256, його не можна використовувати для виведення цього формату на сервер.
Використані команди
Відобразити 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.