无法使用 eval $(ssh-agent) && ssh-add 在同一会话中存储密码

6 server ssh vps

在 Ubuntu 16.04 中,我执行了:

eval $(ssh-agent) && ssh-add
Run Code Online (Sandbox Code Playgroud)

我有:

Agent pid 3361
Run Code Online (Sandbox Code Playgroud)

然后,在插入我的密码后,我成功地通过 SSH 隧道连接到我的 VPS。

问题:

嗯,这不是一个“问题”,但是:

我回到了我的本地会话 exit,当我再次尝试登录到我的 VPS 时,我不得不重新输入我的密码...

我的问题:

为什么我会被要求再次输入密码?

我没有关闭当前会话,而是eval $(ssh-agent) && ssh-add在隧道之前关闭了。那么,为什么系统不会“记住”它呢?

sds*_*sds 3

每次执行此操作时eval $(ssh-agent) && ssh-add,都会启动一个新代理,因此您需要重新对其进行身份验证。

我认为最好的方法是在每个会话中永久存储 SSH 代理数据(在您的 中~/.profile):

export SSHPROC=${HOME}/.ssh/cur-proc.${HOSTNAME}
restart_ssh_agent(){
  . ${SSHPROC}
  kill ${SSH_AGENT_PID}
  /bin/rm -rf ${SSHPROC} ${SSH_AUTH_SOCK} /tmp/ssh-*
  ssh-agent > ${SSHPROC}
  cat ${SSHPROC}
  . ${SSHPROC}
  ssh-add
}
Run Code Online (Sandbox Code Playgroud)

并添加. ${SSHPROC}到您的.bashrc.

然后您调用restart_ssh_agent一次(或者当它因某种原因终止时),然后将您的凭据保留给代理。