为什么 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
这在一定程度上取决于您的发行版和您的个人喜好。
当我写 .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
这在一定程度上取决于您的发行版和您的个人喜好。