Linux 用の Windows サブシステム - ssh-agent を共有しますか?

Linux 用の Windows サブシステム - ssh-agent を共有しますか?

私は Windows 10 上の Windows Subsystem for Linux (WSL) シェル内で Ubuntu 16.04 を実行しています。ターミナル内から ssh-agent を起動し、そのターミナルの存続期間中に何度も使用できます。ps から、また Windows 10 タスク マネージャーからも ssh-agent が実行中であることを確認できます。

ただし、スタート メニューから 2 番目の WSL bash ターミナルを起動すると、ssh-agent が認識されません。奇妙なことに、Windows コマンド ラインから 2 番目のターミナルを起動すると、機能します。回避策としては、既存の bash ウィンドウから新しい bash ウィンドウを開くことが考えられますが、その方法もわかりません。

これに対する解決策はあるでしょうか?

答え1

.bashrc を変更して、実行中の既存の ssh-agent を見つけることができます。

私は、要旨

# ssh-agent configuration
if [ -z "$(pgrep ssh-agent)" ]; then
    rm -rf /tmp/ssh-*
    eval $(ssh-agent -s) > /dev/null
else
    export SSH_AGENT_PID=$(pgrep ssh-agent)
    export SSH_AUTH_SOCK=$(find /tmp/ssh-* -name agent.*)
fi

# optional... potentially annoying
#if [ "$(ssh-add -l)" == "The agent has no identities." ]; then
#    ssh-add
#fi

答え2

別の新しい回答があったのでこれに気付きましたが、ここでの回答のほとんどは、何らかの形の起動スクリプトの調整を提案しています(例~/.bashrc)。車輪の再発明をするよりも、keychain

インストール後 (ほとんどのディストリビューション リポジトリで利用可能、例: sudo apt install keychain)、以下を追加するだけです。

eval $(keychain --eval --agents ssh id_rsa)

... を に設定します。これにより、現在のセッションのおよび変数が既存の を指すように~/.bashrc正しく設定されるか、必要に応じて新しい が開始されます。この方法では、開いているすべての WSL/ターミナル セッションで 1 つの共有のみが使用されます。SSH_AGENT_PIDSSH_AUTH_SOCKssh-agentssh-agent

おもしろい情報 -- これはkeychain元々、Gentoo Linux の創設者でもある Daniel Robbins によって書かれました。

答え3

おそらくそうではありません。これは、シェルの親プロセスとして通常の方法で実行されているようですssh-agent。その他のウィンドウには、使用しているウィンドウに結び付けられていない、独自の親/子プロセス階層があります。

仕事のやり方のこの機能は、エージェントを起動したウィンドウ内で(または)ssh-agentを実行することです。これらの screen/tmux ウィンドウもプロセスの子であり、問​​題なくプロセスと通信できます。screentmuxssh-agent

答え4

あります。最新バージョンをインストールしてくださいWindows 用 OpenSSH、そしてssh エージェント wslヘルパー。指示に従えば、WSL と Windows 間で資格情報を共有する方法が簡単にわかります。うまく機能します。

関連情報