我正在尝试将私钥添加到我的 sshagent。运行命令
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa_personal
完成这项工作非常顺利,因此当我运行 时ssh-add -l
,我会看到密钥已添加。即使eval
根本没有运行该命令,情况也是如此(这也许会引出一个问题,为什么我需要运行它)。但是,如果我创建一个可执行文件add_key.sh
(使用 shebang 和chmod +x
)并向其中添加这些确切的命令,然后运行它,ssh-add -l
则不会显示密钥,而是显示"The agent has no identities"
。
如果我注释掉eval
脚本中的命令并运行它,则不会出现问题,并且它会正确地将密钥添加到代理。我的脚本中有什么问题导致添加密钥失败,为什么如果我从脚本中注释掉命令或只是手动运行命令ssh-add
就不会出现问题?eval
答案1
ssh-agent -s
开始新的代理;当你eval
输出它时,你改变了 shell 环境,这样下面的内容ssh-add
就会将身份添加到那代理人。
如果您在脚本中执行此操作,那么当您返回父环境时,SSH_AUTH_SOCK
/的新值SSH_AGENT_PID
将丢失,因此(尽管新代理仍在运行)ssh-add -l
无法连接到它。
当你刚跑ssh-agent -s
没有 eval
,它启动一个新的代理,但只是将新环境打印到标准输出,因此ssh-add
将新身份添加到父环境中已经运行的任何代理。