如何在不重新登录的情况下重新启动 ssh-agent

如何在不重新登录的情况下重新启动 ssh-agent

我不小心杀死了我的ssh-agent,如何重新启动它而不需要重新连接?

我尝试了这个,但它不起作用:

$ eval $(ssh-agent -s)
Agent pid 8055

然后,我从上一个终端窗口中使用 CTRL+SHIFT+N 打开一个新的 Gnome 终端,然后输入:

$ ssh-add
Could not open a connection to your authentication agent.

但是,如果我从我的第一个 Gnome 终端打开一个新的 Gnome 终端,输入:

$ gnome-terminal &

那么这个新窗口就能够连接到ssh-agent.

我的所有 Gnome 终端是否无法在ssh-agent无需重新连接到 PC/服务器的情况下“看到”?

答案1

这并不像你想象的那样工作。 ssh-agent 会覆盖配置。

要解决这个问题——

寻找代理:

eval "$(ssh-agent -s)"

代理 pid 9546

杀死PID:

kill -9 9546

然后你检查

ssh [email protected]

ssh [email protected]

现在应该可以了。

答案2

killall ssh-agent; eval "$(ssh-agent)"

答案3

尝试使用以下命令重新启动:

sudo service ssh restart

私有/公共 RSA SSH 密钥分别位于 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub 中。您可以将公钥传输到另一台机器上,以通过公钥认证连接到该机器。这可以通过 ssh-copy-id 完成,如下所示:

ssh-copy-id username@host

或者,您可以将公钥 (id_rsa.pub) 附加到服务器的 /home/username/.ssh/authorized_keys 文件中,这本质上就是 ssh-copy-id 的作用。

答案4

问题是,您的原始版本ssh-agent可能是由 GUI 会话启动脚本启动的,并且SSH_AUTH_SOCK此时创建的环境变量由桌面环境的进程继承。

通过 GUI 启动的任何新进程都将继续继承旧值,并且任何正在运行的 Gnome 终端进程(及其内部的 shell)已经继承了旧值。您需要将新SSH_AUTH_SOCK值推送到每个具有旧值的进程中,并触发每个正在运行的ssh客户端进程重新配置自身以使用新值。根本没有任何机制可以做到这一点。

相反,您可以做的是记下旧SSH_AUTH_SOCK值和新值,然后创建一个符号链接代替旧的代理套接字,指向新的套接字

换句话说:

ln -sf <new SSH_AUTH_SOCK value> <old SSH_AUTH_SOCK value>

请记住,新代理仍然是其启动的 shell 的子进程,如果该 shell 退出,则可能会死亡。

相关内容