current shellからssh-agentを起動し、出力されるSSH_AUTH_SOCK等の設定をcurrent shellへ反映する。
一般的なBourne系shellのコマンドはどれか。
ssh-agent -sはshell commandを出力し、evalでcurrent shellへSSH_AUTH_SOCKとSSH_AGENT_PIDを設定する。
詳細解説
eval "$(ssh-agent -s)"agentを起動し、出力されたshell設定をcurrent shellで評価する。
正しい。subshellでagentを起動し、出力されたexport等をevalしてcurrent shellへ反映する。
ssh-agent -s | sshagent出力をssh commandへpipeしてもenvironmentへ反映しない。
誤り。agent出力をssh stdinへ渡してもSSH_AUTH_SOCKをcurrent shellに設定できない。
export ssh-agent -sexportへcommandを渡す構文ではない。
誤り。exportはNAME=VALUE等を扱い、ssh-agent -sをこのままargumentにはできない。
ssh-add --start-agentssh-addにagent起動用の標準optionはない。
誤り。ssh-addは既存agentを利用し、--start-agentでagent processを起動するinterfaceを持たない。
実際に確かめる
一時的な検証環境で実行できる例です。
printf '%s
' 'ssh-agent -s -> shell assignments' 'eval -> apply assignments to current shell'期待される結果
ssh-agent -s -> shell assignments
eval -> apply assignments to current shell理解のポイント
- agent process
- SSH_AUTH_SOCK
- evalでcurrent shellへ反映
確認時の注意
- 確認環境: OpenSSH agent起動構文(agent実行なし)
- 実agent processは起動しない。
基礎のおさらい
agent lifetime
agent processとsocketのlifetime、logout時のcleanupを管理し、古いsocketや共有environmentを残さない。
agent forwarding
remote hostへagent accessを転送すると、そのhostからagentを悪用され得るため必要な場合だけ有効にする。