Прежде чем мы начнем, давайте уточним пару моментов:
- 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
.
Другой, более старый, возможно, еще актуальный подход блокирует их брелок во время сна.