替代eval`ssh-agent`和exec ssh-agent bash

时间:2018-07-11 14:28:23

标签: linux shell exec eval ssh-agent

运行以下两个命令之一似乎可以成功启动SSH代理进程:

eval `ssh-agent`

OR

exec ssh-agent bash

我偏爱第一个,因为第二个exec代替了外壳。显然,第二个使用eval,但有些人对此感到不满意,但我看不到其他选择。


我的问题是:

  1. exec在更换外壳时是否有任何负面影响,或者根本没有任何副作用?我对使用exec感到担心吗?
  2. 使用eval并没有问题,但是出于兴趣,没有脚本或函数(并且没有exec或{{1} })在一行中启动ssh-agent进程?

1 个答案:

答案 0 :(得分:0)

这是对eval的“安全”使用,至少在您信任ssh-agent的范围内,除了类似于以下内容的简单,硬编码的赋值之外,什么都不输出

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想要造成伤害,它可以以一种安静的方式进行。 / p>

使用exec的不利之处在于,取代原来外壳的新外壳可能并不相同;环境是继承的,但是在.bashrc中找不到的某些shell设置可能有所不同。但是,如果将exec ssh-agent bash放在.bashrc中(尤其是最后一行),则shell的配置实际上就没有任何机会与{{ 1}}做到了。 (还可能在.bashrc中包含非幂等代码,这意味着两次执行该代码所产生的行为与只执行一次的代码不同。但是,这又不太可能且易于审核。)