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

Как указать SFTP, какой открытый ключ использовать?

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 для учетной записи пользователя на сервере, к которому вы подключаетесь. В клиенте он не установлен.

https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process

это хорошее чтение о том, как это работает.