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

как процесс ssh-agent увеличивается при каждом входе в систему

Я добавил следующую строку в свой файл .bashrc, чтобы запустить ssh-agent, если он не запущен.

if [ -z "$SSH_AUTH_SOCK" ];then eval `ssh-agent -s`;ssh-add ~/.ssh/my_private_key;fi

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

[vm@localhost ~]$ ssh root@192.168.x.x
Last login: Wed Feb 15 06:32:07 2017 from x.x.x.x
[root@server ~]#  pgrep ssh-agent | wc -l
2
[root@server ~]# exit
Shared connection to x.x.x.x closed.

[vm@localhost ~]$ ssh root@192.168.x.x
Last login: Wed Feb 15 06:32:20 2017 from x.x.x.x
[root@server ~]#  pgrep ssh-agent | wc -l
3
[root@server ~]# exit
Shared connection to x.x.x.x closed.

[vm@localhost ~]$ ssh root@192.168.x.x
Last login: Wed Feb 15 06:32:25 2017 from x.x.x.x
[root@server ~]#  pgrep ssh-agent | wc -l
4

Прежде всего, вы делаете это через сеанс ssh? Если да, то вы можете использовать ssh -A user@host.com и даже не используйте ssh-agent. В -A опция перенаправит ssh-agent вашего хоста на удаленный сервер. Тогда вам даже не нужно копировать ключи ssh на удаленный сервер.

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

Вот простой сценарий, который всегда будет повторно использовать один и тот же ssh-agent или запускать ssh-agent, если он не запущен. Вы также можете легко объединить эти 3 строки в псевдоним 1 строки.

# set SSH_AUTH_SOCK env var to a fixed value
export SSH_AUTH_SOCK=~/.ssh/ssh-agent.sock

# test whether $SSH_AUTH_SOCK is valid
ssh-add -l 2>/dev/null >/dev/null

# if not valid, then start ssh-agent using $SSH_AUTH_SOCK
[ $? -ge 2 ] && ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null

источник