
Как я могу проверить fingerpint вновь подключающегося хоста, когда я пытаюсь подключиться с моей удаленной машины к домашней. При первом подключении я получил это:
[email protected]$ ssh [email protected]:~/
The authenticity of host '[home-machine.org]:222 ([x.xx.xx.xx]:222)' can't be established.
ECDSA key fingerprint is SHA256:6lr/VtTwgrKZVNZQ8y8Le/ilfBYfo0e+9UliSg+AD2k.
Are you sure you want to continue connecting (yes/no)?
Как мне проверить отпечатки пальцев моей "домашней машины"? Я пытался перечислить их на моей домашней машине следующим образом:
[email protected]:~$ for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file}; done
1024 d1:ef:db:b4:24:fc:ca:fe:e1:11:8c:36:0a:77:90:49 /etc/ssh/ssh_host_dsa_key.pub (DSA)
256 d9:25:51:16:ca:76:bd:8f:b8:6a:79:a2:1c:81:4b:4c /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
2048 3a:c6:2d:29:7c:b9:16:e8:ed:1c:a8:26:5d:ab:0d:1e /etc/ssh/ssh_host_rsa_key.pub (RSA)
[email protected]:~$
Но эти ключи, похоже, в другом формате. Это что-то вроде MD5 отпечатка пальца? Как мне получить эти отпечатки в едином формате?
решение1
Ваш SSH-сервер предоставляет хэши открытых ключей SHA256, которые намного безопаснее хэшей MD5.
Затем вам нужно указать ssh-keygen, что вы хотите SHA256 вместо MD5-хэшей. Попробуйте выполнить команду на вашемдомашняя машина(к которому вы пытаетесь подключиться с удаленной машины в вашем примере):
for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file} -E sha256; done
решение2
Используемые команды
Отобразить ascii-art открытого ключа хоста, хранящегося на сервере (это необходимо сделать на стороне сервера, к которому вы подключаетесь по ssh):
ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
-л: Показать отпечаток указанного файла открытого ключа.
-в: визуальный (ascii-art)
-E md5: алгоритм хеширования, используемый для вычисления отпечатка пальца («md5» или «sha256»). («sha256» предпочтительнее, если доступен). (может быть недоступен в старых версиях ssh-keygen)
-ф: файл
Отображение ascii-art открытого ключа хоста удаленного сервера (это необходимо сделать на стороне клиента, с которого вы подключаетесь по ssh):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-о: вариант
visualhostkey: визуальный (ascii-art)
FingerprintHash: используемый алгоритм хэширования (используйте тот же, что вы получили от сервера: md5 или sha256)
Действия по проверке подлинности хоста/сервера
Во-первых, 1.это должно быть сделано локально на сервере (тот, к которому вы хотите подключиться по ssh): это даст вам первый ascii-art. Распечатайте его или сфотографируйте.
Во-вторых, 2.должно быть сделано при первом SSH-подключении; оно отобразит второй ascii-art. Если ascii-art тот же самый, то вы можете ответитьдак«доверяю ли я?»вопрос (т.е.
Are you sure you want to continue connecting (yes/no)
).
Пример
- 1. Серверная часть
$ ssh-keygen -l -v -E md5 -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.. |
+-----------------+
- 2. Клиентская сторона
$ 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 открытого ключа, полученного отхост_сервер_для_подключения(согласно алгоритму хэширования, указанному в параметрах). Это то же самое, что и использование только ssh, но с большим количеством визуальных опций, поэтому соединение будет продолжаться так же, как и обычное соединение ssh.
решение3
Сервер
ssh-keygen -l -v -f /etc/ssh/ssh_host_ed25519_key
Вам может понадобиться сопоставить это с алгоритмом клиента с одним из других файлов в этом каталоге. Файлы имеют правильные разрешения, поэтому он будет использовать открытый ключ.
Например, вам может понадобиться написать
ssh-keygen -l -v -f /etc/ssh/ssh_host_rsa_key
Клиент
ssh -o visualhostkey=yes -o FingerprintHash=sha256