运行 ssh-agent 似乎没有设置环境变量

运行 ssh-agent 似乎没有设置环境变量

我不明白什么?

我运行它ssh-agent并且它似乎设置了一些环境变量但是当我echo设置它们时,我没有得到我期望的结果。

❯ ssh-agent
SSH_AUTH_SOCK=/var/folders/pn/b_2jl_j55kl504pvctj2jw2c0000gn/T//ssh-SGC2u3LSE0Gu/agent.6521; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6522; export SSH_AGENT_PID;
echo Agent pid 6522;

~
❯ echo $SSH_AGENT_PID


~
❯ echo $SSH_AUTH_SOCK
/private/tmp/com.apple.launchd.lfH6wkqh4H/Listeners

答案1

ssh-agent是一个单独的可执行文件。它既不能设置也不能更改 shell 的变量和环境。如果没有调试器,只有 shell 本身可以执行此操作(比较这个答案)。

因此ssh-agent生成 shell 代码来评价。您实际上看到了打印到控制台的代码,但并未对其进行评估。开始新ssh-agent 设置变量是:

eval "$(ssh-agent)"

笔记:

  • 手册和操作指南通常使用

     eval `ssh-agent`
    

    因为它是一种通用语法,应该适用于许多 shell,无论是sh-like 还是csh-like。with 命令遵循-like shell"$(…)"中的现代良好做法,并且您的命令在此上下文中为-like。shzshsh

  • ssh-agent尝试判断您的 shell 是sh-like 还是csh-like,并据此生成 shell 代码。换句话说,它的行为类似于ssh-agent -sssh-agent -c,取决于它对您的 shell 的“看法”。如果您知道您的 shell 是什么,zsh那么您可能更喜欢eval "$(ssh-agent -s)"以防工具因某种原因猜测错误。但通常不需要这样做。

  • 几乎总是你应该避免eval,一般来说很难安全地使用它,有人说它“eval是邪恶的”。ssh-agent 没关系但是,由于是ssh-agent专门设计用于的eval,它会生成完全受控的 shell 代码,远离使 eval 变得“邪恶”的区域和陷阱。

相关内容