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

Как программно найти ключ ssh по умолчанию?

По моему опыту, по умолчанию ssh будет искать в ~ / .ssh / id_rsa (.pub) пару ключей по умолчанию.

Иногда я пытаюсь писать сценарии, чтобы воспользоваться этим расположением ключа по умолчанию, но в конечном итоге я его жестко кодирую (например, DEFAULT_KEY_LOCATION="${HOME}/.ssh/id_rsa" или что-то в этом роде), что я считаю BadThing ™.

Существуют ли какие-либо переменные среды или выходные данные инструментов ssh, которые могут сказать мне, где находятся ключи пользователя по умолчанию?

Например, есть ли такие команды, как ssh-defaults --key-location или переменные окружения $ SSH_DEFAULT_KEY?

На странице руководства по ssh:

     -i identity_file
         Selects a file from which the identity (private key) for public
         key authentication is read.  The default is ~/.ssh/identity for
         protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and
         ~/.ssh/id_rsa for protocol version 2.  Identity files may also be
         specified on a per-host basis in the configuration file.  It is
         possible to have multiple -i options (and multiple identities
         specified in configuration files).  ssh will also try to load
         certificate information from the filename obtained by appending
         -cert.pub to identity filenames.

Впоследствии, если он находится в месте, которое может быть обнаружено ssh автоматически, путь указывать не нужно вообще. т.е.

ssh -i ~/.ssh/id_rsa foo@bar.com

и

ssh foo@bar.com

оба будут работать одинаково. Если вам нужно найти местоположение ключа программно по причине, отличной от использования ssh (т.е. заполнения авторизованных ключей), вы можете проверить все местоположения, которые проверяет файл конфигурации, и проанализировать файл ssh_config для поиска отдельных записей хоста. От человека ssh_config:

         The file name may use the tilde syntax to refer to a user’s home
         directory or one of the following escape characters: ‘%d’ (local
         user’s home directory), ‘%u’ (local user name), ‘%l’ (local host
         name), ‘%h’ (remote host name) or ‘%r’ (remote user name).

Таким образом, вам также придется проанализировать этот формат, чтобы найти отдельные файлы (если они определены).