Прежде чем мы начнем, давайте уточним пару моментов:
- macOS позволит вам хранить парольные фразы закрытого ключа в цепочке ключей macOS.
- ssh-agent (в macOS или любой другой системе) хранит расшифрованный закрытый ключ в памяти.
Различие важно, чтобы ответить на ваши вопросы.
- Кажется, что есть два варианта: ssh-agent или Keychain Access.
Не совсем. Смотрите разъяснение выше. Если вы используете директиву UseKeychain yes
в вашем ~/.ssh/config
, то любая программа, подключающаяся к сокету ssh-agent
, позволит ssh-agent
войти в связку ключей для ключевой фразы для расшифровки вашего закрытого ключа. Если вы также используете директиву AddKeysToAgent yes
, этот расшифрованный ключ будет сохранен в агенте для последующего использования. Также полезно увидеть еще один связанный с этим вопрос.
... Если вам нужно удобство временного хранения парольных фраз, какой стандарт?
Насколько мне известно, MacOS не может временно хранить пароли. Однако можно получить частично удовлетворительное решение для почти такого же эффекта - см. Ответ на вопрос 3 ниже.
- Как я могу определить и очистить парольную фразу для моего закрытого ключа по умолчанию в Keychain Access? Я вижу безымянный закрытый ключ, но не хочу его удалять, не зная наверняка, что это мой сохраненный SSH-ключ.
Если вы откроете Keychain Access на своем Mac и начнете поиск по ssh
, скорее всего, вы не увидите ключевую фразу ssh. Начиная с macOS Sierra (10.12), Apple перенесла, какие ssh
ключи цепочки для ключей были сохранены. Чтобы увидеть его, вам нужно выбрать «View >> Show Invisible Items», и тогда записи парольной фразы ключа ssh будут видны.
Скорее всего, "безымянный закрытый ключ", который вы видели, был каким-то другим ключом RSA (или DSA).
- Каков наилучший вариант, если я хочу регулярно очищать пароли от закрытых ключей? Я мог бы использовать
ssh-add -D
под заданием cron.
Хотя вы можете поместить ssh-add -D
в работу cron, и она, вероятно, сделает то, что вы хотите, она не удалит парольные фразы из цепочки для ключей. Это только очистит память запущенного ssh-agent
от всех расшифрованных закрытых ключей. Если в вашей конфигурации есть UseKeychain yes
, ssh-agent
радостью повторно расшифрует ключ в следующий раз, когда он понадобится (см. Ответ на вопрос 1 выше).
Одна альтернатива, чтобы удовлетворить ваше подразумеваемое желание не иметь дешифрованных ключей, доступных постоянно, - отключить оба UseKeychain
и AddKeysToAgent
, как в:
Host *
UseKeychain no
AddKeysToAgent no
Затем вручную добавьте ключи в работающий ssh-agent
с ограниченным временем жизни, используя опцию -t <lifetime>
для ssh-add
, как показано в:
ssh-add -t 4h ~/.ssh/id_rsa
Это добавит ваш (по умолчанию) ключ RSA к агенту со сроком службы 4 часа. Через четыре часа ключ будет удален автоматически.
Насколько я знаю, у вашего пользователя нет директивы ~/.ssh/config
определяющей время жизни по умолчанию для любого ключа, добавляемого к агенту, и в системе нет sshd_config
. Однако может быть способ указать macOS запустить агент со временем жизни по умолчанию, используя опцию -t <lifetime>
. Для intrepid файл plist агента запуска хранится в /System/Library/LaunchAgents/com.openssh.ssh-agent.plist
.
Другой, более старый, возможно, еще актуальный подход блокирует их брелок во время сна.