Сервер уничтожается из-за растущего числа процессов ssh-агента

У меня есть пользователь развертывания, это выполняет cronjob, настраивающийся в каждую минуту.

На удаленном сервере (цель развертывания) я не имел свои открытые ключи в наличии, но вместо этого получил a Could not open a connection to your authentication agent на моем сервере развертывания на ssh-добавляют.

Я закончил тем, что поместил эту строку в свой .bashrc:

ps -u $(whoami) | grep ssh-agent &> /dev/null || (eval $(ssh-agent) && ssh-add)

Несмотря на него не был должен в моем понимании, cronjob открывает новый ssh-агент каждый раз. После 14-16 часов сервер исчерпывает память после создания журнала керна с большим количеством записей как это:

Aug 12 21:50:58 tools kernel: [64021.568750] [25668]  1000 25668     2654       81       9        0             0 ssh-agent

... и я должен перезапустить его.

Как я могу ограничить количество рабочих процессов ssh-агента одному или уничтожить процесс после окончания cronjob?

ОБНОВИТЕ данные превосходные работы ответа, я просто узнал, что это у меня был другой eval ssh-add в crontab. Я собираюсь вознаградить данный вопрос щедростью.

6
задан 18 August 2015 в 01:56

2 ответа

Для уничтожения процесса ssh-агента можно просто использовать эти ssh-agent -k команда.

Однако Вы могли бы получить следующее сообщение об ошибке:

SSH_AGENT_PID не набор, не может уничтожить агент

, Он связан с подоболочка вызванный Вашей командой в круглых скобках. Родительская оболочка не видит переменные, которые были сгенерированы в подоболочке, делая пустое SSH_AGENT_PID.

можно изменить остроту в:

ps -u $(whoami) | grep ssh-agent &> /dev/null
if [ $? -ne 0 ];then
    eval $(ssh-agent)
    ssh-add
fi
trap 'ssh-agent -k; exit' 0

последняя строка уничтожит агент для Вас, когда Вы выйдете из системы.

, Но обратите внимание на то, что это только работает с одной сессией, скажем, если Вы войдете в систему со второй сессией, то затем вторая сессия не будет благословлена ssh-агентом, который Вы авторизовали на первой сессии. Вам будет нужен к обходному решению он путем экспорта SSH_AGENT_PID и SSH_AUTH_SOCK на второй сессии, чтобы заставить его работать. Можно сделать это путем печати этих двух переменная во временный файл и загрузить его в .bashrc, быстром примере:

ps -u $(whoami) | grep ssh-agent &> /dev/null
if [ $? -ne 0 ];then
    eval $(ssh-agent)
    ssh-add
    echo "export SSH_AGENT_PID=$SSH_AGENT_PID" > ~/.agent-profile
    echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" >> ~/.agent-profile
else
    source ~/.agent-profile
fi
trap 'ssh-agent -k; exit' 0

Весело проводят время.

Редактирование:
не забывают уничтожать все Ваши ssh-агенты перед попыткой этого в .bashrc иначе он не назовет ssh-агент, поскольку уже существует рабочий.

6
ответ дан 23 November 2019 в 07:48

Я использовал solution2 (источник ~/.agent-profile), Он работал на меня прежде, чем уничтожить процессы ssh-агента. После двух дней я уничтожил все прошлые процессы ssh-агента. получение ниже ошибки и количества процессов ssh-агента, увеличивающихся для каждого входа в систему.

[username@i3-dljump01 ~] выход из системы $ уничтожает: Никакой такой процесс

0
ответ дан 23 November 2019 в 07:48

Другие вопросы по тегам:

Похожие вопросы: