Используемые команды

Используемые команды

Как я могу проверить 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

Связанный контент