Что именно посылает ssh при согласовании ключей?
При явном указании файла идентификации в ssh:
ssh -i ./id_rsa ...
У меня есть эти строки в трассировке отладки ssh:
debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Означает ли это сгенерированный ssh id_rsa
также содержит публичный показатель RSA? id_rsa
Формат выглядит довольно явным, поскольку он содержит закрытый ключ со своим блоком "BEGIN PRIVATE KEY", поэтому "предложение открытого ключа" должно означать нечто иное, чем "отправка открытого ключа на сервер".
РЕДАКТИРОВАТЬ:
Чтобы уточнить, я хочу знать, что именно происходит за линией "предоставления открытого ключа". Если клиент имеет несколько ключей, все они будут предложены серверу один за другим.
3 ответа
Чтобы подключиться к SSH-серверу и пройти аутентификацию с парой открытых / закрытых ключей, сначала вы должны предоставить свой открытый ключ серверу.
это делается путем копирования открытого ключа для вашего закрытого ключа на сервер и добавления его в ~/ssh/authorized_keys
либо копировать / вставить, копирование id_rsa.pub
в ~/.ssh/authorized_keys
на сервере или с cat id_rsa.pub >> ~/.ssh/authorized_keys
добавив его в список.
когда вы подключаетесь, сервер использует ваш открытый ключ для подписания запроса, а ваш клиент использует ваш закрытый ключ id_rsa
чтобы расшифровать вызов, повторно зашифруйте его с открытым сервером host key
и отправь обратно.
хост проверяет, правильно ли вы расшифровали вызов, расшифровывая свой ответ своим закрытым ключом, а клиент / хост устанавливает зашифрованное соединение на основе общих данных, а не ваших открытых / закрытых ключей.
НЕТ ТОЧКИ в обмене - ваш личный ключ или личный ключ хоста, которым вы обменивались или открывались друг другу. Ваш открытый ключ хранится на сервере, но именно поэтому он является ПУБЛИЧНЫМ ключом.
Криптография с открытым / закрытым ключом основана на очень простой системе:
У вас есть открытый ключ, способный выполнять одностороннее шифрование, и закрытый ключ, способный дешифровать. Затем открытый ключ может быть предоставлен всем в мире, и никто не сможет расшифровать ваши зашифрованные данные, хотя они смогут шифровать данные, которые вы можете расшифровать с помощью своего личного ключа.
Таким образом, ответ на ваш вопрос: "Ваш открытый ключ".
Я не думаю, что на самом деле следует отправлять открытый или закрытый ключ в это время. Клиент должен выполнить шифрование с использованием закрытого ключа в виде открытого текста, который уже известен серверу. Хост может расшифровать это сообщение с помощью открытого ключа, зная, что единственный, кто мог правильно его зашифровать, - это клиент, который содержит соответствующий закрытый ключ, таким образом аутентифицируя клиента.
Я верю, что это говорит Offering public key: ./id_rsa
потому что он использует закрытый ключ (хранится в ./id_rsa
) выполнить шифрование на открытом тексте, известном серверу, и затем сервер будет использовать открытый ключ для дешифрования этого зашифрованного текста и подтверждения его соответствия открытому тексту. Файл открытого ключа ./id_rsa.pub
никогда не должен понадобиться клиенту после первоначальной генерации ключа. Это используется только сервером для расшифровки.