Несоответствие в поведении ssh-agent

Несоответствие в поведении ssh-agent

Похоже, у меня возникло небольшое расхождение между поведением ssh-agent для двух настроенных мной учетных записей.

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

Теперь я хотел бы запустить этот скрипт как пользователь учетной записи службы. Я создал учетную запись службы и для генерации ключей временно установил оболочку входа в /bin/bash. Я сгенерировал свои ключи, удалил парольную фразу и добавил идентификатор к агенту.

Похоже, что несоответствие заключается в том, как оболочка подключается к агенту. В моей учетной записи пользователя мне не приходилось перезапускать агент с тех пор, как я начал тестирование (примерно две недели). Но когда я пытаюсь запустить скрипт под учетной записью службы, мне, похоже, приходится каждый раз перезапускать агента, добавлять идентификатор и затем выполнять работу.

В идеале я хотел бы, чтобы агент работал бесконечно и чтобы учетная запись службы автоматически переподключалась к нему всякий раз, когда запускается скрипт, чтобы мне не нужно было управлять процессами внутри скрипта. Я просмотрел конфигурации каждой учетной записи и не нашел никаких различий. Любое понимание было бы очень ценно.

**Изменить: Я забыл указать, что агент работает непрерывно, но процессы оболочки для учетной записи службы, похоже, не используют его, и необходимо запустить новую:

ovmmon   14043  0.0  0.0  53916   204 ?        Ss   May17   0:00 ssh-agent
ovmmon   14952  0.0  0.0  53916   204 ?        Ss   May17   0:00 ssh-agent

решение1

Здесь происходит одно из двух:

  1. SSH-agent на самом деле закрывается, когда вы выходите из системы.
  2. SSH-agent все еще работает, но вы теряете информацию о его PID и канале

Вы можете проверить, какой из них имеет место, выполнив команду ps -ef и проверив наличие ssh-agent.

Если ssh-agent мертв, вам нужен способ сохранить его живым. Вот три способа сделать это:

  1. Вы можете запустить ssh-agent из startscript при загрузке сервера и вывести вывод в файл (с соответствующими правами доступа, чтобы предотвратить его несанкционированное использование). Если вы сделаете ключ без пароля, вы также можете добавить ключ из скрипта. (Очевидно, что последняя часть рекомендуется только в том случае, если учетная запись, к которой вы подключаетесь, имеет очень ограниченные права на удаленном сервере). Затем ваш скрипт должен прочитать информацию об агенте SSH из файла, созданного при запуске.
  2. Используйте экран при входе в учетную запись службы; затем отключитесь от сеанса экрана после запуска агента.
  3. Используйте nohup при запуске агента.

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

решение2

Если вы используете метод вызова под-оболочки, ssh-agent завершит работу при выходе из оболочки. Если вы используете метод eval, оболочка будет продолжать работать до ручного завершения.

Видеть:http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch06_03.htm

Конкретно:http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch06_03.htm#ch06-50031.html

Также я знаю, что при запуске из cron переменные ENV могут вызывать проблемы. Так что это еще одна область для проверки.

Связанный контент