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
,有些人对此表示反对,但我看不到其他选择。
我的问题是:
- 在替换 shell 时,
exec
是否有任何负面影响或根本没有任何副作用?我对使用 exec
的担忧是否有根据?
- 我在使用
eval
时没有遇到问题,但是,出于兴趣,有哪些替代命令 没有脚本或函数 (并且没有 exec
或 eval
) 在一行中启动 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
中有非幂等代码,这意味着执行它两次将导致与只执行一次不同的行为。但同样,这不太可能并且很容易审计。)
运行 这些命令中的任何一个似乎都成功启动了 SSH 代理进程:
eval `ssh-agent`
或
exec ssh-agent bash
我偏爱第一个,因为第二个 exec
取代了 shell。显然,第二个使用 eval
,有些人对此表示反对,但我看不到其他选择。
我的问题是:
- 在替换 shell 时,
exec
是否有任何负面影响或根本没有任何副作用?我对使用exec
的担忧是否有根据? - 我在使用
eval
时没有遇到问题,但是,出于兴趣,有哪些替代命令 没有脚本或函数 (并且没有exec
或eval
) 在一行中启动 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
中有非幂等代码,这意味着执行它两次将导致与只执行一次不同的行为。但同样,这不太可能并且很容易审计。)