每次登录时 ssh-agent 进程如何增加

Paw*_*wan 4 ssh ssh-keys ssh-agent

我在 .bashrc 文件中添加了以下行,以启动 ssh-agent(如果它未运行)。

if [ -z "$SSH_AUTH_SOCK" ];then eval `ssh-agent -s`;ssh-add ~/.ssh/my_private_key;fi
Run Code Online (Sandbox Code Playgroud)

但每次我再次登录时,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
Run Code Online (Sandbox Code Playgroud)

wis*_*cky 5

首先,您是通过 ssh 会话执行此操作吗?如果是这样,那么您可以使用ssh -A user@host.com甚至不使用 ssh-agent。该-A选项会将主机的 ssh 代理转发到远程服务器。然后您甚至不需要将 ssh 密钥复制到远程服务器。

回到最初的问题:运行的问题ssh-agent是默认情况下它每次都会使用不同的随机套接字名称。这就是您的 ssh-agent 进程不断增加的原因。您想要做的是使用ssh-agent -a提供固定插座的选项。那么无论你调用多少次,它都不会启动另一个 ssh-agent。

这是一个简单的脚本,它将始终重复使用相同的 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
Run Code Online (Sandbox Code Playgroud)

来源