如何使ssh-agent在所有终端中都能正常工作?


27

我已经使用ssh-copy-id设置了自动(无密码)ssh登录到某些服务器。ssh-agent仅在运行它的终端上工作。我如何ssh-add在所有终端上工作?

自然,我不希望没有密码短语的SSH密钥。

Answers:


26

如果要登录图形会话,请安排ssh-agent在会话启动期间启动。一些发行版已经为您做到了。如果没有,请安排ssh-agent从会话启动脚本或窗口管理器运行。如何执行取决于您的桌面环境和窗口管理器。例如,如果您手动启动窗口管理器,只需更换呼叫my_favorite_wm通过ssh-agent my_favorite_wm

不要ssh-agent.bashrc或开始.zshrc,因为这些文件是由每个新的交互式外壳程序执行的。开始的ssh-agent位置在会话启动文件中,例如.profile.xsession

如果无论您从何处登录,都想在所有进程上使用相同的SSH代理,则可以使其始终使用相同的套接字名称,而不是使用随机命名的套接字。例如,您可以将其放在您的中~/.profile

export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$HOSTNAME.sock
ssh-add -l 2>/dev/null >/dev/null
if [ $? -ge 2 ]; then
  ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null
fi

仅供参考,它检查的原因$? -ge 2是因为退出代码1是ssh-agent没有密钥,但是ssh-agent已经在运行。
Wisbucky

7

您可能想要一个专门用于此目的的程序,例如Keychain。从手册页:

DESCRIPTION
   keychain is a manager for ssh-agent, typically run from ~/.bash_profile.
   It allows your shells and cron jobs to share a single ssh-agent process.

真的很喜欢这个!
Colin D

大!谢谢。完美运作。
某人

这很好,从Github下载压缩文件后,请确保将未压缩的keychain-2.8.5目录的完整路径添加到〜/ .bash_profile export PATH = $ PATH:行
Kevin Zhao

4

将其应用于您的桌面环境或窗口管理器。过去使用custom手动完成此操作时~/.Xclients,我只是将其用作最后一行:

ssh-agent mywindowmanger

可能会有一些DE为此具有自己的设置选项,尽管在我看来(例如)KDE没有。当前,看来我的是通过来自的代码运行的/etc/X11/xinit/xinitrc-common(大概是由fedora完成的),因为它对所有用户均有效,而与DE / WM无关,并且父进程命令为$HOME/.Xclients,但该文件未引用ssh-agent(而/etc/X11/xinit/xinitrc-common实际上)。

如果没有~/.Xclients,则可以只用那一行创建一个,但是您将需要知道启动DE / WM的命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.