SFTP имеет параметр «-i», чтобы установить закрытый ключ, который будет использоваться для аутентификации с открытым ключом. Однако, похоже, не существует варианта, для которого использовать соответствующий открытый ключ. Конечно, это должно быть необходимо, чтобы сообщить серверу, какой открытый ключ использовать для решения задачи.
Почему это и как это работает?
Сначала файл для «закрытого» ключа содержит все части вашего ключа. И публичная, и приватная части. Если вы удалите локальную копию вашего открытого ключа, вы можете просто воссоздать ее из файла, содержащего закрытый ключ. Вы можете увидеть все для ключа RSA с openssl rsa -in filename.id_rsa -text
. Таким образом, вам никогда не понадобится идентифицировать «открытую» часть пары ключей, если у вас есть закрытый ключ. Секретный ключ содержит всю информацию.
Что касается сервера, аутентифицирующего клиента. Сервер не шифрует что-либо с помощью открытых ключей. А бывает наоборот. Клиент отправляет некоторую информацию с подпись подписано закрытым ключом. Сервер может проверить это, используя известные ему открытые ключи.
https://tools.ietf.org/html/rfc4252
To perform actual authentication, the client MAY then send a
signature generated using the private key. The client MAY send the
signature directly without first verifying whether the key is
acceptable. The signature is sent using the following packet:
byte SSH_MSG_USERAUTH_REQUEST
string user name
string service name
string "publickey"
boolean TRUE
string public key algorithm name
string public key to be used for authentication
string signature
The value of 'signature' is a signature by the corresponding private
key over the following data, in the following order:
string session identifier
byte SSH_MSG_USERAUTH_REQUEST
string user name
string service name
string "publickey"
boolean TRUE
string public key algorithm name
string public key to be used for authentication
Используемый открытый ключ устанавливается в файле authorized_keys для учетной записи пользователя на сервере, к которому вы подключаетесь. В клиенте он не установлен.
это хорошее чтение о том, как это работает.