Назад | Перейти на главную страницу

Отпечаток ключа ECDSA - похоже, он закодирован в base64, но слишком мало символов

Я установил GitLab ВМ, и создали на нем проект. Теперь я пытаюсь подключиться к нему с другой машины, используя мой клиент git (Git для Windows v2.7.1 ... также пробовал обновиться до последней версии 2.15.1, но без изменений).

На машине с Windows я пытаюсь:

git push -u origin --all
The authenticity of host 'localgit.local (10.1.2.3)' can't be established.
ECDSA key fingerprint is SHA256:twmcV7LjBtI9vUsDeFEHeH0lUcBAihWtGye0K9vHCrk.
Are you sure you want to continue connecting (yes/no)? no

Я выбрал «нет», потому что когда я дважды проверял это на виртуальной машине, я обнаружил другой отпечаток пальца:

ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 7e:e4:4e:7f:47:b0:41:75:2c:45:bd:be:f5:44:77:d7 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)

Хорошо, это шестнадцатеричный формат, поэтому я просто конвертирую его в base64, верно?

hex: 7ee44e7f47b041752c45bdbef54477d7
base64: fuROf0ewQXUsRb2+9UR31w==

Что ж, это не соответствует ... что, если я пойду другим путем и конвертирую этот отпечаток base64 в шестнадцатеричный и посмотрю, как он выглядит? Оказывается, я не могу, это 43 символа, а длина строки base64 должна быть кратна 4.

Есть идеи о том, что мне здесь не хватает?

Формат октетов, разделенных двоеточиями, представляет собой отпечаток MD5, а не SHA256. Вы не можете напрямую преобразовать одно в другое (ну, возможно, вы могли бы, если отмените отпечаток MD5, но это все равно потребует немного мощности процессора).

Который ssh-keygen выводит отпечаток MD5, предполагает, что на этой машине может быть запущена довольно старая версия OpenSSH, потому что формат вывода по умолчанию в наши дни - SHA256. Вы можете попробовать пройти -E sha256 к ssh-keygen чтобы заставить его выводить хэш SHA256, в случае, если есть версия, которая поддерживает SHA256, но по умолчанию установлена ​​на MD5, и вы, случайно, используете ее, но я бы не хотел говорить, что она будет работать точно.

Если вы не можете получить свою версию ssh-keygen для вывода SHA256 другой вариант - «понизить» клиента SSH для вывода отпечатка MD5 при соединении. Для этого вам нужно установить -o FingerprintHash=md5 в командной строке (или FingerprintHash md5 в конфиге SSH). Как именно это лучше сделать, учитывая, что вы используете SSH через git, оставим в качестве упражнения для проницательного читателя. <усмешка>

Боковая панель: причина, по которой хэш SHA256 base64 не является «правильным» количеством символов, заключается в том, что хеш SHA256 не является «правильным» количеством символов для размещения в строке base64 без некоторого завершающего = приметы. Поскольку последние несколько символов "всегда" будут = знаки, они просто выпадают, что спасает пару бесполезных символов.

У меня был тот же вопрос, поэтому я копнул немного глубже.

На сервере linux вы можете запустить

awk '{print $2}' /etc/ssh/ssh_host_ecdsa_key.pub | base64 -d | sha256sum -b | sed 's/ .*$//' | xxd -r -p | base64

для создания того же SHA256+Base64 отпечаток пальца, который появляется, когда ваш клиент пытается подключиться.

Источник: https://www.lastbreach.com/blog/ssh-public-key-verification-with-fingerprinthash