В ssh-agent -t
[1] есть несколько кратких обсуждений о существующей функции, и еще в 2001 году была запись о debian-devel [2], желающей использовать функцию тайм-аута бездействия. Здесь аналогичное обсуждение на SE [3] для театрализованного представления.
Я должен задаться вопросом, как остальная часть планеты защищает ssh-ключи - я упускаю что-то очевидное, чтобы это стало такой болезненной точкой для меня, и, очевидно, больше ни для кого? Конкретно я имею в виду скриптовые взаимодействия ssh, например, с ansible. Кажется, что сегодня ваш выбор:
- Установите время жизни вашего ключа в агенте на тревожно длительный период времени, например. Максимальная продолжительность выполнения ваших сценариев может составлять 1 час (я сомневаюсь, что многие люди допускают, чтобы их тайм-аут повторной аутентификации sudo растянулся так долго!) - но
seahorse
/gnome-keyring-daemon
даже почти не поддерживают это так много [4] - Присматривайте за своими долгосрочными сценариями и продолжайте вводить вашу фразу-пароль каждые 5/10/15 минут: теперь за вами легко можно наблюдать, вводя вашу фразу-пароль 20 раз в день
- Взломайте свое собственное решение для домашнего варки, чтобы имитировать эту недостающую функцию, возможно, в сочетании с
TMOUT
var вашей оболочки (спасибо за предложение по поводу 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
ssh-agent
знать, когда сеанс неактивен, но, по крайней мере, начинайте тайм-аут с того момента, когда произошла последняя операция подписания, а не только с момента ssh-agent
его запуска. Кроме того, я уже использую отдельные учетные записи пользователей и ключевые файлы для каждой роли скрипта, sudoers разрешает sudo'd только 1 или 2 команды, если необходимо, и я рассмотрел, lshell
чтобы заблокировать вещи дальше. Но все это по-прежнему не освобождает меня от необходимости защищать мои файлы ключей: только потому, что sudo zfs send
это единственная команда, разрешенная для данного ключа, это довольно мощная команда для любого, кто использует этот ключ!
ControlMaster
/ ControlPath
/ ControlPersist
(см. man ssh_config
) Для вашего скрипта. По крайней мере, если он подключается только к одному хосту.
ssh-agent
держать ключи загруженными до перезагрузки (что может занять несколько недель).
ssh-agent
зависит от типа сеанса, частью которого он является (например, сеанс tty, сеанс X11 или что-то еще). Единственное, что я хотел бы сказать, если ваши автоматизированные сценарии, вероятно, не должны зависеть от ключа, загруженного в ваш агент. Каждый из них, вероятно, должен иметь свой собственный закрытый ключ, который авторизуется с помощью принудительных команд на соответствующих серверах для запуска только определенных удаленных команд, которые должен выполнять каждый скрипт. Это, конечно, позволило бы вам запустить тех из cron и т.д ...