Как сообщить SFTP, какой открытый ключ использовать?
SFTP имеет опцию "-i", чтобы установить закрытый ключ для аутентификации с открытым ключом. Тем не менее, похоже, не существует варианта, для которого должен использоваться соответствующий открытый ключ. Конечно, это должно понадобиться, чтобы сообщить серверу, какой открытый ключ использовать для вызова.
Почему это и как это работает?
2 ответа
Сначала файл для "закрытого" ключа содержит все части вашего ключа. И общественные и частные части. Если вы удалите локальную копию вашего открытого ключа, вы можете просто воссоздать ее из файла, который содержит закрытый ключ. Вы можете увидеть все для ключа 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
Открытый ключ, который нужно использовать, задается в файле author_keys для учетной записи пользователя на сервере, к которому вы подключаетесь. Это не установлено в клиенте.
хорошо читать, как это работает.