运行以下两个命令之一似乎可以成功启动SSH代理进程:
eval `ssh-agent`
OR
exec ssh-agent bash
我偏爱第一个,因为第二个exec
代替了外壳。显然,第二个使用eval
,但有些人对此感到不满意,但我看不到其他选择。
我的问题是:
exec
在更换外壳时是否有任何负面影响,或者根本没有任何副作用?我对使用exec
感到担心吗?eval
并没有问题,但是出于兴趣,没有脚本或函数(并且没有exec
或{{1} })在一行中启动ssh-agent进程?答案 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
中包含非幂等代码,这意味着两次执行该代码所产生的行为与只执行一次的代码不同。但是,这又不太可能且易于审核。)>