Есть ли техническая причина, по которой у ssh-agent отсутствует функция sudo-like inactivity / idle timeout?

9

В ssh-agent -t[1] есть несколько кратких обсуждений о существующей функции, и еще в 2001 году была запись о debian-devel [2], желающей использовать функцию тайм-аута бездействия. Здесь аналогичное обсуждение на SE [3] для театрализованного представления.

Я должен задаться вопросом, как остальная часть планеты защищает ssh-ключи - я упускаю что-то очевидное, чтобы это стало такой болезненной точкой для меня, и, очевидно, больше ни для кого? Конкретно я имею в виду скриптовые взаимодействия ssh, например, с ansible. Кажется, что сегодня ваш выбор:

  • Установите время жизни вашего ключа в агенте на тревожно длительный период времени, например. Максимальная продолжительность выполнения ваших сценариев может составлять 1 час (я сомневаюсь, что многие люди допускают, чтобы их тайм-аут повторной аутентификации sudo растянулся так долго!) - но seahorse/ gnome-keyring-daemonдаже почти не поддерживают это так много [4]
  • Присматривайте за своими долгосрочными сценариями и продолжайте вводить вашу фразу-пароль каждые 5/10/15 минут: теперь за вами легко можно наблюдать, вводя вашу фразу-пароль 20 раз в день
  • Взломайте свое собственное решение для домашнего варки, чтобы имитировать эту недостающую функцию, возможно, в сочетании с TMOUTvar вашей оболочки (спасибо за предложение по поводу freenode #openssh IRC)
  • Не устанавливайте время жизни ключа вообще, т. Е. Ваш агент сохраняет ваш ключ загруженным вечно или пока вы не убьете / не перезагрузите

Если вы используете короткие тайм-ауты агента ssh, надежные пароли и разные ключевые файлы для каждой роли, для которой вы проходите аутентификацию: это приводит к очень неприятному дню!

Я экспериментировал с gpgkey2ssh и смарт-картами, но на самом деле это не решает эту конкретную проблему: мне все еще нужна функциональность ssh-agent, и я не хочу повторять авторизацию каждые 5 минут, чтобы предотвратить раскрытие моих закрытых ключей в памяти, пока мой компьютер простаивает.

Я делаю это неправильно?

[1] Настройка времени ожидания по умолчанию для агента SSH

[2] https://lists.debian.org/debian-devel/2001/09/msg00851.html

[3] /server/518312/putty-pageant-forget-keys-after-period-of-inactivity

[4] https://bugs.launchpad.net/ubuntu/+source/gnome-keyring/+bug/129231

csirac2
источник
1
Не ответ, но, да, есть некоторые технические проблемы, связанные с тем, как обнаружить бездействие сеанса, когда он не ssh-agentзависит от типа сеанса, частью которого он является (например, сеанс tty, сеанс X11 или что-то еще). Единственное, что я хотел бы сказать, если ваши автоматизированные сценарии, вероятно, не должны зависеть от ключа, загруженного в ваш агент. Каждый из них, вероятно, должен иметь свой собственный закрытый ключ, который авторизуется с помощью принудительных команд на соответствующих серверах для запуска только определенных удаленных команд, которые должен выполнять каждый скрипт. Это, конечно, позволило бы вам запустить тех из cron и т.д ...
Селада
Я не ожидаю ssh-agentзнать, когда сеанс неактивен, но, по крайней мере, начинайте тайм-аут с того момента, когда произошла последняя операция подписания, а не только с момента ssh-agentего запуска. Кроме того, я уже использую отдельные учетные записи пользователей и ключевые файлы для каждой роли скрипта, sudoers разрешает sudo'd только 1 или 2 команды, если необходимо, и я рассмотрел, lshellчтобы заблокировать вещи дальше. Но все это по-прежнему не освобождает меня от необходимости защищать мои файлы ключей: только потому, что sudo zfs sendэто единственная команда, разрешенная для данного ключа, это довольно мощная команда для любого, кто использует этот ключ!
csirac2
Другой обходной путь: используйте параметры ControlMaster/ ControlPath/ ControlPersist(см. man ssh_config) Для вашего скрипта. По крайней мере, если он подключается только к одному хосту.
Дероберт
Это интересное предложение, и оно научило меня чему-то (спасибо!), Но, похоже, ничего не решает, если я все равно буду ssh-agentдержать ключи загруженными до перезагрузки (что может занять несколько недель).
csirac2

Ответы:

2

Если это касается вас, то вы можете легко использовать xscreensaver-command -watchинтерфейс для запуска, ssh-add -Dкогда экран заблокирован. Проверьте man-страницу для очень простого примера.

Марко д'Итри
источник