运行这些命令中的任何一个似乎成功地启动了SSH代理进程:
eval `ssh-agent`或
exec ssh-agent bash我倾向于第一个,因为第二个exec替换了shell。显然,第二种方法是使用eval,有些人对此不屑一顾,但我看不到其他的选择。
我的问题是:
exec在更换外壳时是否有任何负面的副作用,或者甚至有任何副作用?我是否有理由担心使用exec?eval没有问题,但出于兴趣,没有脚本或函数的有哪些替代命令(以及没有exec或eval)在一行中启动ssh代理进程?发布于 2018-07-11 14:37:05
这是对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想要做坏事,它可以以一种更安静的方式这样做。
使用exec的缺点是替换原始shell的新shell可能不是相同的;环境是继承的,但是在.bashrc中找不到的一些shell设置可能不同。但是,如果将exec ssh-agent bash放在.bashrc中(特别是作为最后一行),您的shell的配置实际上没有任何机会与.bashrc所做的任何事情不同。(您的.bashrc中也可能有非幂等代码,这意味着执行它两次将导致与只执行一次不同的行为。但同样,这是不太可能的,而且很容易审计。)
https://stackoverflow.com/questions/51288089
复制相似问题