MacOS Keychain Access держит пароль SSH бесконечно

697
Charlie Hileman

Для удобства я хотел бы, чтобы MacOS держал мою парольную фразу RSA, но не бесконечно (из соображений безопасности). Я верю, что SSH будет использовать Keychain Access с этой конфигурацией SSH

Host * UseKeychain true 

И я верю, что он будет использовать ssh-agent с этой конфигурацией:

Host * AddKeysToAgent yes 

Несколько вопросов:

  1. Кажется, что есть два варианта: ssh-agent или Keychain Access . Если вам нужно удобство временного хранения парольных фраз, какой стандарт?
  2. Как я могу определить и очистить парольную фразу для моего закрытого ключа по умолчанию в Keychain Access? Я вижу безымянный закрытый ключ, но я не хочу удалять его, не зная наверняка, что это мой сохраненный ключ SSH
  3. Каков наилучший вариант, если я хочу регулярно очищать пароли от закрытых ключей? Я мог бы использовать ssh-add -D под заданием cron
0

1 ответ на вопрос

1
eggo

Прежде чем мы начнем, давайте уточним пару моментов:

  • macOS позволит вам хранить парольные фразы закрытого ключа в цепочке ключей macOS.
  • ssh-agent (в macOS или любой другой системе) хранит расшифрованный закрытый ключ в памяти .

Различие важно, чтобы ответить на ваши вопросы.

  1. Кажется, что есть два варианта: ssh-agent или Keychain Access.

Не совсем. Смотрите разъяснение выше. Если вы используете UseKeychain yesдирективу в вашей ~/.ssh/config, то любая программа, подключающаяся к ssh-agentсокету, позволит ssh-agentполучить доступ к связке ключей для ключевой фразы для расшифровки вашего закрытого ключа. Если вы также используете AddKeysToAgent yesдирективу, то этот расшифрованный ключ будет сохранен в агенте для последующего использования. Также полезно увидеть еще один связанный с этим вопрос .

... Если вам нужно удобство временного хранения парольных фраз, какой стандарт?

Насколько мне известно, MacOS не может временно хранить пароли . Однако можно получить частично удовлетворительное решение для почти такого же эффекта - см. Ответ на вопрос 3 ниже.

  1. Как я могу определить и очистить парольную фразу для моего закрытого ключа по умолчанию в Keychain Access? Я вижу безымянный закрытый ключ, но не хочу его удалять, не зная наверняка, что это мой сохраненный SSH-ключ.

Если вы откроете Keychain Access на своем Mac и sshначнете поиск, скорее всего, вы не увидите ключевую фразу ssh-ключа. Начиная с macOS Sierra (10.12), Apple перенесла, какие sshключи цепочки для ключей были сохранены. Чтобы увидеть его, вам нужно выбрать «View >> Show Invisible Items», и тогда записи парольной фразы ключа ssh будут видны.

Скорее всего, «безымянный закрытый ключ», который вы видели, был каким-то другим ключом RSA (или DSA).

  1. Каков наилучший вариант, если я хочу регулярно очищать пароли от закрытых ключей? Я мог бы использовать 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.

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

Похожие вопросы