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

Gow*_*ham 46 ssh ssh-agent

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

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

Gil*_*il' 41

如果您正在登录图形会话,请安排ssh-agent在会话启动期间启动。一些发行版已经为您做到了。如果没有,请安排ssh-agent从会话启动脚本或窗口管理器运行。怎么做取决于你的桌面环境和你的窗口管理器。例如,如果您手动启动窗口管理器,只需更换呼叫my_favorite_wm通过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
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,它检查“$?”的原因 -ge 2` 是因为退出代码 1 是当 ssh-agent 没有密钥,但 ssh-agent 已经在运行时。 (5认同)
  • @Asenar 不。`.profile` 是登录时运行的正确文件。每次打开终端时都会运行“.bashrc”。请参阅 https://superuser.com/questions/183870/difference- Between-bashrc-and-bash-profile (2认同)

小智 9

您可能想要一个诸如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.
Run Code Online (Sandbox Code Playgroud)