Назад | Перейти на главную страницу

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

Похоже, у меня есть небольшое несоответствие между поведением 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. При выходе из системы ssh-agent фактически закрывается
  2. Ssh-agent все еще работает, но вы теряете информацию о его PID и канале.

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

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

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

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

Если вы используете метод вызова суб-оболочки, 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 могут вызывать проблемы. Так что это еще одна область для проверки.