WSL:Windows 10を再起動しない限り(美人コンテストなど)、SSH秘密鍵にアクセスできるようにします。

WSL:Windows 10を再起動しない限り(美人コンテストなど)、SSH秘密鍵にアクセスできるようにします。

これまで、Windows 10では、主にPuTTyバンドル(PuTTygen、Pageant、PuTTyなど)を使用してSSH経由でリモートLinuxシステムにアクセスしていました。

私は美人コンテストを次のように使用します。秘密鍵ホルダー秘密鍵(およびパスワード)は、コンピュータを再起動しない限りメモリに保存されます。

次のコマンドを使用するように、WSL OpenSSHをクライアントとしてより頻繁に使用したいと思います。

ssh USER@IP -vvv -L 22:localhost:22 # Or [email protected];

しかし、WSL OpenSSHでは、美人コンテストと同様の振る舞いが見つかりませんでした。

何らかの理由で、コンピュータ自体が再起動されるまで、可能なすべてのWSLシェル(シェルがシャットダウンしても)のSSHキーをメモリに保存します。

WSL OpenSSHで美人コンテストと同様の動作を達成するにはどうすればよいですか?

答え1

ssh-agent、とが必要ですssh-add

ssh-agentログインするとすでに起動している可能性があります(Debianでは)。テストするにはを実行してくださいssh-add -l。エージェントが稼働している場合は、キーを表示しないでください。実行されていない場合は、ブローカーに接続できませんなどのエラーメッセージが表示されます。

キーを追加します。デフォルト名の場合は実行してくださいssh-add。それ以外の場合は、ssh-add «path/to/your/key/key-name»パスワードの入力を求められます。

答え2

Un*Nixでssh-agent理想的には、セッションログイン時にできるだけ早く実行する必要があります。これは通常、GUI(X11など)ログインで行われます。悪魔化解除に加えて、このコマンドは便利に出力としても使用されます。シェルコマンドシェル評価を準備するために新しく作成されたデーモンに接続するには、どのエクスポート変数が必要ですか?

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-TO9z33k5zo6t/agent.25671; export SSH_AUTH_SOCK;
SSH_AGENT_PID=25673; export SSH_AGENT_PID;
echo Agent pid 25673;

posix shシェルでやり直す:

$ eval $(ssh-agent)
Agent pid 25965
$ printenv SSH_AUTH_SOCK SSH_AGENT_PID
/tmp/ssh-XgTqsra2Pok2/agent.25964
25965

ログイン設定中に共通の親プロセスによって実行される場合、後続のすべてのプロセスはこれらの変数を継承するため、ssh-agentセッション内のどこでも実行できます。

sshさらに、これらの変数のいくつかはプロキシ転送オプション()を使用してリモートで継承することができ、ローカルである-A必要はありませんssh-agent


これで、同じユーザーが再利用したいがssh-agent関連していない他のアクセス(他の端末、セッション、リモート、ローカルなど)では、そのアクセスにはメカニズムがないため、以前にエクスポートした2つの変数を継承しません。 。このユーザーは必要な場所からどこからでもその値を取得できます。その値をエクスポートしたシェルを実行する他の端末、この特定の目的のためにこれらの変数を保存するように設計されたスクリプト(または上記のコマンドを使用する方が良い)によって生成された固定場所の一部のファイルなど。してください。

SSH_AUTH_SOCK=/tmp/ssh-XgTqsra2Pok2/agent.25964; export SSH_AUTH_SOCK;
SSH_AGENT_PID=25965; export SSH_AGENT_PID;

したがって、次の代わりにいくつかの端末で実行している場合eval $(ssh-agent)

$ mkdir -m 700 -p ~/.ssh-agent-info
$ ssh-agent > ~/.ssh-agent-info/variables
$ . ~/.ssh-agent-info/variables
Agent pid 25965

その後、いくつかのキーの追加を開始します。

$ ssh-add /tmp/demokey
Enter passphrase for /tmp/demokey: 
Identity added: /tmp/demokey
$ ssh-add -l
256 SHA256:Ayd3PCiSkVVV09IqwEXz2Fn3nuXF70FDPMlNtZiuTtY user@host (ED25519)

そして、同じ変数を再インポートする同じシステム上の他の端末ユーザーは、期待される結果を得る必要があります。

$ . ~/.ssh-agent-info/variables
Agent pid 25965
$ ssh-add -l
256 SHA256:Ayd3PCiSkVVV09IqwEXz2Fn3nuXF70FDPMlNtZiuTtY user@host (ED25519)

ssh-agentこれは、死亡または鍵を忘れるように求められるまで、パスワードを提供する必要がなくなることを意味します。

これはポートを持つすべてのプラットフォームでほぼ機能します。SSHを開くそしてssh-agent私はこれがWSLでも同じようにうまくいくと信じています。

理想的には、これらのコマンドをシェル起動スクリプト(たとえば)に入れて、新しいスクリプトを作成する前に(正しい)スクリプトがすでに実行されているかどうかを最初に検出し、それ以外の場合はプロセスがリークされるよう.profileにする必要があります。ssh-agentパスワードを再入力する必要があります。

関連情報