_ssh-agent
_を開始(または再起動)したい場合、eval $(ssh-agent)
を実行して実行する必要のあるいくつかのコマンドが表示されます。もちろん、これはbashまたはcshの構文を提供するため、fishでは失敗します。
コマンドは次のようになります。
_SSH_AUTH_SOCK=/var/folders/v4/c116f_790t7g58lh3jbr7_vm0000gq/T//ssh-L95xhmGl9FZo/agent.36846; export SSH_AUTH_SOCK;
SSH_AGENT_PID=36847; export SSH_AGENT_PID;
echo Agent pid 36847;
_
またはcshの場合:
_setenv SSH_AUTH_SOCK /var/folders/v4/c116f_790t7g58lh3jbr7_vm0000gq/T//ssh-Tf8etHZfP9k3/agent.36873;
setenv SSH_AGENT_PID 36874;
echo Agent pid 36874;
_
eval (ssh-agent -c)
を実行すると、cshバージョンは問題なく実行され、_echo $SSH_AGENT_PID $SSH_AUTH_SOCK
_は期待される出力を提供します。ただし、新しいシェルはこれらの変数を保持しません。 setenv
は何をしますか?明らかにそれはset
s変数ですが、ドキュメントのどこにもありません。新しい端末を起動すると、変数が失われるので、エクスポートされているかどうかわかりませんか?
setenv
が定義_set -gx
_の魚関数であることがわかったので、変数をglobal
変数として設定してエクスポートすると思います。変数のスコープをよく理解していないので、_ssh-agent
_変数に適切なものはありますか?
コンテキストのために、私は指示に基づいてこれを行っています githubで 。私は何年もの間githubにsshキーを使用していて、_ssh-agent
_または_ssh-add
_のことをしたことはありませんが、新しいコンピューターでセットアップしているときに気づきました。また、_$SSH_AUTH_SOCK
_がすでに存在するため、os xはそれ自体(または私が過去に設定したもの)でssh-agentを実行しているようです。だから多分これを実行することは重要ではありませんか? _ssh-add
_は、_ssh-agent
_を実行しなくても、文句なしに実行されます。
私は少し前にこれを書きました:
function ssh_agent --description 'launch the ssh-agent and add the id_rsa identity'
if begin
set -q SSH_AGENT_PID
and kill -0 $SSH_AGENT_PID
and grep -q '^ssh-agent' /proc/$SSH_AGENT_PID/cmdline
end
echo "ssh-agent running on pid $SSH_AGENT_PID"
else
eval (command ssh-agent -c | sed 's/^setenv/set -Ux/')
end
set -l identity $HOME/.ssh/id_rsa
set -l fingerprint (ssh-keygen -lf $identity | awk '{print $2}')
ssh-add -l | grep -q $fingerprint
or ssh-add $identity
end
強調するために、私はssh-agent出力からcreate niversal変数を使用し、setenvはglobal変数を作成します
これはFreeBSD10.2で私のために働きます。以下を〜/ .config/fish /config.fishに追加します。
if begin; test -z (command pgrep ssh-agent); and not test -S $SSH_AUTH_SOCK; end
eval (command ssh-agent -c | sed -E 's/^setenv (.+);$/set \1; set -Ux \1;/')
end
-Uxを指定しない最初のセットは、ssh-agentを起動する最初の端末の環境変数を設定します。 -Uxを指定した2番目のセットは、他のすべての端末の環境変数を設定します。