为什么nohup无法让ssh-agent进程在会话中保持活跃状态​​?

时间:2015-04-12 08:02:11

标签: session ssh nohup

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

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

1 个答案:

答案 0 :(得分:0)

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

典型的地方是:

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

这取决于您的发行量和个人喜好。