Cygwin で ssh-agent を起動する最適な方法は何ですか?

Cygwin で ssh-agent を起動する最適な方法は何ですか?

ssh-agent私は ssh パススルーを頻繁に使用するので、Cygwin を起動するときに起動するようにしたいと思います。

以下を追加してみました:

eval `ssh-agent.exe`

私の ですが、 を使用して新しいターミナル ウィンドウを開く.bashrcたびにが実行され、新しいが作成されますが、これは望ましくなく、パススルーに支障をきたします。Alt-F2.bashrcssh-agent

次に、eval コマンドを に移動してみました.bash_profileが、これも同じ問題が発生します。新しいターミナル ウィンドウはすべて新しいログイン シェルと見なされるようです。

3 番目のオプションは を使用することですが、私はこれについて最近知ったばかりで、この特定の目的のためにこれをどのように使用すればよいのか、また、おそらくもっと重要なのは、サービスが作成された場所からと情報を、作成されたすべての新しいシェルにcygrunsrv渡す方法が明確ではありません。SSH_AUTH_SOCKSSH_AGENT_PID

この結果 (単一の ssh-agent が実行されて待機し、その情報が新しく開かれたシェルですぐに使用できるようになる) を達成するための最善の方法に関する提案を歓迎します。

答え1

にインストールすることもできます.bashrcが、再度起動する前に、すでに実行されているかどうかを確認する必要があります。たとえば、次のようにします。

if [ -z "$SSH_AUTH_SOCK" ]; then
    (umask 077; ssh-agent > "$HOME/.ssh/environment")
    ssh-add
fi

プロセスの一環として。

Also, if the agent is not running, you could first test if that environment file exists and source it like

environ="$HOME/.ssh/environment"
if [ -f "$environ" ]; then
    . "$environ" >/dev/null
fi

if [ -z "$SSH_AUTH_SOCK" ] || ! ps -p "$SSH_AGENT_PID" | grep -q ssh-agent; then
    (umask 077; ssh-agent > "$environ")
    ssh-add
fi

これについては長い回答で詳しく説明されていますここU&Lサイトにて。

私はこれと似たようなことをしますが、environホーム ディレクトリがネットワーク共有上にあり、エージェントを異なるホストで同時に実行したいので、ファイルに現在のホスト名を含めます。

そして、これがプロセス間で渡される変数を取得する方法に関する質問にどのように答えるかを明確に示すためにSSH_AUTH_SOCK、出力をssh-agentファイルに保存し、各シェルで再度ソースします。

関連情報