Я установил 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