关于为什么 ssh-agent 需要使用 eval 来运行
目录
警告
本文最后更新于 2022-09-13 15:46,文中内容可能已过时。
执行测试
1. 首先我们直接运行 ssh-agent
, 可以看到如下效果

2. 当我们执行 ssh-add
时,提示如下

ssh-add 会通过 SSH_AUTH_SOCK
环境变量,获取与 ssh-agent 通信的 unix 套接字,所以我们下面需要设置最开始提示的环境变量。
3. 配置环境变量测试
|
|

可以看到已经可以使用了,在第一次执行命令的结果中,还有一个 SSH_AGENT_PID
环境变量,这个是 ssh-agent
的进程 ID, 使用 ssh-agent -k
可以用来退出代理程序。
通过上面的测试发现,只要我们的环境变量配置好正确的 unix 套接字,就可以使用 ssh-agent 了,但是每次都这样配置太麻烦了。
为什么 ssh-agent 不帮我们设置环境变量呢?
这其实和 linux 操作系统有关,因为 ssh-agent 是作为当前 shell 的一个子进程运行的。在 linux 中,进程只能修改自己的环境变量,并将它们传递给子进程。但它不能修改其父进程的环境变量,因为系统不允许。
https://unix.stackexchange.com/questions/351725/why-eval-the-output-of-ssh-agent
使用 eval 解决
eval 可以将字符串作为命令来执行,在我们直接执行 ssh-agent
时,屏幕会输出三行内容,这三行内容就是三条命令,所以我们可以将 ssh-agent
的执行结果在当前 Shell 作为命令执行,那么你可以看下下面这个命令,是不是很合理
|
|

首先执行
ssh-agent
,输出的结果是三行命令,通过 eval 来执行这三行命令,就达到了自动添加环境变量的目的。因为第三行是一个 echo 命令,所以将 pid 输出了出来。
请我喝杯水

