web-dev-qa-db-ja.com

魚で `ssh-agent`の出力を実行します。 `setenv`は何をしますか?

_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は何をしますか?明らかにそれはsets変数ですが、ドキュメントのどこにもありません。新しい端末を起動すると、変数が失われるので、エクスポートされているかどうかわかりませんか?

setenvが定義_set -gx_の魚関数であることがわかったので、変数をglobal変数として設定してエクスポートすると思います。変数のスコープをよく理解していないので、_ssh-agent_変数に適切なものはありますか?

コンテキストのために、私は指示に基づいてこれを行っています githubで 。私は何年もの間githubにsshキーを使用していて、_ssh-agent_または_ssh-add_のことをしたことはありませんが、新しいコンピューターでセットアップしているときに気づきました。また、_$SSH_AUTH_SOCK_がすでに存在するため、os xはそれ自体(または私が過去に設定したもの)でssh-agentを実行しているようです。だから多分これを実行することは重要ではありませんか? _ssh-add_は、_ssh-agent_を実行しなくても、文句なしに実行されます。

3
askewchan

私は少し前にこれを書きました:

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変数を作成します

3
glenn jackman

これは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番目のセットは、他のすべての端末の環境変数を設定します。

1
fizk