web-dev-qa-db-ja.com

なぜssh-agentの出力を評価するのですか?

ssh-agentを実行するには、

eval $(ssh-agent)

ssh-agentの出力をevalする必要があるのはなぜですか?

実行できるように設計されていないのはなぜですか?


注:バッククォート( `)は廃止されるため削除されました。あなたはすることができます 例えば、ここでそれについての詳細を読んでください

77
jx12345

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がそれ自体を実行できない理由については、Wordの選択に注意してください。 「できない」ではない、「できない」。 Unixでは、プロセスは自身の環境変数のみを変更し、それらを子に渡すことができます。 できないシステムが許可しないため、親プロセスの環境を変更します。これはかなり基本的なセキュリティ設計です。

evalは、ssh-agent utilityを使用して回避できます。ここで、utilityは、ログインシェル、ウィンドウマネージャー、またはSSH環境変数を設定するために必要なものです。これはマニュアルにも記載されています。

89
Shadur