eval `ssh-agent` 和 exec ssh-agent bash 的替代方案

Alternatives to eval `ssh-agent` and exec ssh-agent bash

运行 这些命令中的任何一个似乎都成功启动了 SSH 代理进程:

eval `ssh-agent`

exec ssh-agent bash

我偏爱第一个,因为第二个 exec 取代了 shell。显然,第二个使用 eval ,有些人对此表示反对,但我看不到其他选择。


我的问题是:

  1. 在替换 shell 时,exec 是否有任何负面影响或根本没有任何副作用?我对使用 exec 的担忧是否有根据?
  2. 我在使用 eval 时没有遇到问题,但是,出于兴趣,有哪些替代命令 没有脚本或函数 (并且没有 execeval) 在一行中启动 ssh-agent 进程?

这是 "safe" 对 eval 的使用,至少在您相信 ssh-agent 只输出类似于 [=22= 的简单硬编码赋值的范围内]

SSH_AUTH_SOCK=/var/folders/...; export SSH_AUTH_SOCK;
SSH_AGENT_PID=xxxxx; export SSH_AGENT_PID;
echo Agent pid xxxxx;

ssh-agent 的输出专门设计用于传递给 eval,让我们面对现实吧:如果 ssh-agent 想要造成伤害,它可以以更安静的方式进行.

使用 exec 的缺点是替换原来 shell 的新 shell 可能不相同;环境是继承的,但在 .bashrc 中找不到的一些 shell 设置可能不同。但是,如果您将 exec ssh-agent bash 放在 您的 .bashrc 中(尤其是最后一行),您的 shell 就没有任何机会了的配置与 .bashrc 所做的不同。 (也有可能你的 .bashrc 中有非幂等代码,这意味着执行它两次将导致与只执行一次不同的行为。但同样,这不太可能并且很容易审计。)