如何让 ssh-agent 在所有终端上工作?

如何让 ssh-agent 在所有终端上工作?

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

当然,我不喜欢没有密码的 SSH 密钥。

答案1

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

不要ssh-agent.bashrc或开始.zshrc,因为这些文件由每个新的交互式 shell 执行。开始的位置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

答案2

您可能想要一个程序,例如钥匙链,正是为此目的而设计的。从手册页:

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.

答案3

将其应用到您的桌面环境或窗口管理器。当我过去使用 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 的命令。

相关内容