Сделайте так, чтобы истек срок действия моего SSH-ключа или время ожидания

12

У меня есть закрытый ключ SSH, который я использую для аутентификации, который хранится в ~ / .ssh / id_rsa . Когда я захожу на сервер по ssh, мне предлагается ввести пароль для разблокировки ключа:

введите описание изображения здесь

Мне это нравится. Мне также нравится, что я могу ssh снова и снова, и он не запрашивает мой пароль.

Что мне не нравится, так это то, что я не обязан вводить свой ключевой пароль через несколько дней или даже недель. Я могу заблокировать экран или перевести его в режим сна, и мне все равно не нужно вводить пароль. Единственный раз, когда кажется, что срок действия пароля истекает, когда я выхожу из системы (что я делаю редко).

Как я могу получить срок действия пароля ключа через некоторое время, заставляя меня ввести свой пароль еще раз для аутентификации? Делаем так, чтобы, возможно, через 1 час ключ автоматически забывался.

Майкл Кропат
источник

Ответы:

4

Вместо того, чтобы настраивать ssh-agent (который теперь требует глупого взлома), я настоятельно рекомендую просто изменить настройки цепочки для ключей по умолчанию (логин). Я использую очень полезную «блокировку во время сна», а также «блокировку через 4 часа», потому что мне не нужны подсказки, если я на самом деле не афк.

Откройте Keychain Access и щелкните правой кнопкой мыши связку ключей входа, чтобы изменить настройки: Настройки безопасности брелка

Или, если вы предпочитаете командную строку:

security set-keychain-settings -lu -t 14400

Это приведет, по крайней мере, к одному дополнительному приглашению для разблокировки самой цепочки для ключей (требующей ввода пароля для входа в систему), а также к сообщению того ключа, который вы пытаетесь использовать ... но это лучше, чем отключение защиты целостности системы IMO.

Дэйв Грегори
источник
Для меня это не вариант в El Capitan, и команда командной строки, похоже, ничего не меняет. Знаете ли вы, есть ли где-нибудь похожая опция в El Capitan?
Ян
1
Я уверен, что смог сделать это на El Cap - я только что проверил, и оба метода (UI и cmdline), безусловно, все еще работают на Sierra. Я могу сделать это только с помощью цепочки для ключей входа в систему, но не System или iCloud.
Дэйв Грегори
9

Примечание : в более новых версиях OS X вы должны отключить защиту целостности системы, чтобы этот ответ работал. (Спасибо @Dave Gregory и @Jaap за указание на это.)

Открыть /System/Library/LaunchAgents/com.openssh.ssh-agent.plist(в более старых версиях:) org.openbsd.ssh-agent.plistв текстовом редакторе. Заменить:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
</array>

с:

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh-agent</string>
    <string>-l</string>
    <string>-t</string>
    <string>30m</string>
</array>

Срок действия ключа истечет через 30 минут.

Перезагрузка. Подожди, перезагрузись?!? Это не Windows! Да, перезагрузись.

Ну, вы можете попытаться расшифровать инструкции по изменению настроек на лету , но удачи.

Майкл Кропат
источник
1
Такой педант, как я, заменил бы «1800» на «30 м», так как это немного облегчает чтение. Посмотрите ФОРМАТЫ ВРЕМЕНИ в sshd_config (8) для полного формата.
Тони Уильямс
@ Тони Уильямс круто! исправлено
Майкл Кропат
Кажется, это не работает для меня на Йосемити; кто-нибудь еще?
Дэйв Грегори
Я нашел обходной путь на Yosemite, который не включает отключение защиты целостности системы; добавлен в качестве ответа ниже.
Дэйв Грегори
1
Спасибо за информацию @Jaap. В настоящее время я не пользуюсь OS-X ежедневно, поэтому я не могу ничего проверить лично, но, чтобы попытаться быть хорошим проводником в этих вопросах, я обновил свой ответ на основе вашей информации и изменил принятый ответ на Дейва Грегори. потому что отключение защиты целостности системы во многих случаях кажется нецелесообразным.
Майкл
7

Вам нужно установить жизнь ключа. Обычно по умолчанию это навсегда.

При запуске ssh-addвы хотите использовать эту -tопцию. Если вы хотите ключевую жизнь одного часа, то это так ssh-add -t 1h. Форматы времени можно увидеть на sshd_configстранице руководства, но проще говоря, это число, за которым следуют s, m, h, d или w в течение секунд, минут, часов, дней или недель.

ssh-addможет быть помещен в ваш файл .bashrc, и он просто попросит вас подтвердить ключ один раз. Даже когда ключ «истекает», он не удаляется - он просто снова запрашивает фразу-пароль, когда делается попытка его использовать.

Другой вариант - изменить параметры запуска, для ssh-agentкоторых они хранятся, /System/Library/LaunchAgents/org.openbsd.ssh-agent.plistи добавить -tтуда. (Я использую LaunchControlдля их изменения, но вы можете сделать это вручную, если вы будете осторожны.)

Тони Уильямс
источник
Я предпочел бы не забывать запускать ssh-addвручную, прежде чем запускать sshкаждый раз. Это интересно, но я действительно ищу что-то автоматическое.
Майкл Кропат
+1 спасибо за указание на org.openbsd.ssh-agent.plistрешение
Майкл Кропат
1

Другое решение:

ssh-add -t <time> <ssh-private-key>  # Set maximum lifetime to your SSH priv key.
killall ssh-agent                    # Kill all ssh-agent processes.
ssh-add -D                           # Delete all identities recorded by the agent.

С этим решением вам не нужно выбирать тайм-аут для всей вашей цепочки для ключей - довольно неприятно, когда вы хотите установить тайм-аут на несколько секунд для записи пароля вашего личного ключа - и вам не нужно отключать свой SIP для редактирования / System / Библиотека / LaunchAgents / org.openbsd.ssh-agent.plist.

symsymmas
источник