我不小心杀死了我的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 退出,则可能会死亡。