【问题标题】:Alternatives to eval `ssh-agent` and exec ssh-agent bash [closed]eval `ssh-agent` 和 exec ssh-agent bash 的替代品 [关闭]
【发布时间】:2018-07-11 22:37:05
【问题描述】:

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

eval `ssh-agent`

exec ssh-agent bash

我偏爱第一个,因为第二个 exec 替换了外壳。显然,第二个使用eval,有些人对此不以为然,但我看不到替代品。


我的问题是:

  1. exec 在更换外壳时是否有任何负面影响或确实有任何副作用?我对使用exec 的担忧是否合理?
  2. 我在使用 eval 时没有问题,但是出于兴趣没有脚本或函数(并且没有 execeval)有哪些替代命令来启动 ssh - 代理进程在一条线上?

【问题讨论】:

    标签: linux shell exec eval ssh-agent


    【解决方案1】:

    这是对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 中有非幂等代码,这意味着执行两次将导致与仅执行一次不同的行为。但同样,这不太可能且易于审核。)

    【讨论】:

    • 感谢 Q1 和 Q2 的回答——正如你所说的“ssh-agent 专门设计用于传递给eval”,这让我感到很奇怪,实际上没有其他机制可以做这 - 无论是否 hacky,就像“Googlewhack”一样。我看到问题被搁置了,也许它应该在另一个 Stack 站点上
    猜你喜欢
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2012-04-16
    • 1970-01-01
    • 2014-12-19
    • 2020-05-25
    • 1970-01-01
    相关资源
    最近更新 更多