Shell

為什麼要評估 ssh-agent 的輸出?

  • November 20, 2020

為了執行,ssh-agent我必須使用:

eval $(ssh-agent)

為什麼需要eval輸出ssh-agent?為什麼我不能執行它?

ssh-agent輸出您需要連接到它的環境變數:

shadur@proteus:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-492P67qzMeGA/agent.7948; export SSH_AUTH_SOCK;
SSH_AGENT_PID=7949; export SSH_AGENT_PID;
echo Agent pid 7949;
shadur@proteus:~$ 

通過呼叫eval您立即將這些變數載入到您的環境中。

至於為什麼不能自己ssh-agent這樣做……注意這個詞的選擇。不是“不會”、“不能”。在 Unix 中,程序只能修改自己的環境變數,並將它們傳遞給子程序。它不能修改其父程序的環境,因為系統不允許。這是非常基本的安全設計。

你可以eval通過使用ssh-agent utilitywhere utilityis your login shell、你的視窗管理器或任何其他需要設置 SSH 環境變數的東西來解決這個問題。手冊中也提到了這一點。

引用自:https://unix.stackexchange.com/questions/351725