По моему опыту, по умолчанию 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).
Таким образом, вам также придется проанализировать этот формат, чтобы найти отдельные файлы (если они определены).