为什么 nohup 无法使 ssh-agent 进程在会话之外保持活动状态?

Why nohup failed to keep ssh-agent process alive out of session?

当我写 .bashrc 脚本来保存公钥密码时,最重要的命令是:

eval `ssh-agent -s`

问题是,如果会话退出,ssh-agent 将自动关闭,导致需要在下一个会话中再次输入密码。我想要的是在系统重启之前只设置一次密码。因此我尝试:

eval `nohup ssh-agent -s`

希望 ssh-agent 可以像其他长 运行 进程一样在启动会话后继续存在。但是,它不起作用...为什么?以及如何实现我的目标?

提前致谢。

仅供参考,整个脚本是:

ssh-reagent() {
  for agent in $TMPDIR/ssh-*/agent.*; do
    export SSH_AUTH_SOCK=$agent
    if ssh-add -l &> /dev/null; then
      echo "Found working SSH Agent:"
      ssh-add -l
      return
    else
      rm -rf $(dirname ${SSH_AUTH_SOCK})
      export SSH_AUTH_SOCK=
    fi
  done
  eval `ssh-agent -s`  # <-- How to keep ssh-agent alive when logout?
  ssh-add ~/.ssh/id_rsa
}
ssh-reagent

不!错误的做法!相反,您只需要注意 在哪里 启动 ssh-agent。您不应该为每次 shell 启动都执行此操作,而应该为登录 shell 执行一次。该进程会生成用户的所有其他进程,因此该代理将一直可用,直到用户再次注销。

典型的地方是:

  • /etc/X11/xdm/sys.xsession~/.xsession 用于图形登录
  • /etc/profile~/.profile~/.bash_profile 正常登录 shell

这在一定程度上取决于您的发行版和您的个人喜好。