WSLで1Password SSHエージェントを使う

1Passwordマニュアル|WSLでのSSHエージェント設定方法を解説。Gitコマンド認証も簡単に行える手順を詳しく紹介します。

WSLで1Password SSHエージェントを使う

1Password Windows Subsystem for Linux(WSL)統合により、Windowsホストで実行されている1Password SSHエージェントを使って、SSHとGitコマンドを認証し、WSL内でGitコミットに署名できるようになります。

1Password統合はWSL 1とWSL 2の両方をサポートします。

必要条件

  1. 1Passwordにサインアップしてください。

  2. 1Password for Windowsをインストールしてサインインしてください。

統合の仕組み

WSLを使うと、コマンドラインからWindows OpenSSHクライアント(ssh.exe)などのWindowsツールを実行できます。1Password WSL統合は、相互運用性を活用します。WSLに組み込まれており、SSHリクエストをWindows上の1Password SSHエージェントに転送します。

標準のOpenSSHエージェント転送のように SSHエージェントリクエストを転送する代わりに、WSLからWindowsで実行されているssh.exeプロセスにSSHリクエスト全体を効果的に転送できます。その後、ssh.exeプロセスはWindowsホスト上の1Password SSHエージェントを使ってリクエストを認証します。

これは、SSH設定への変更は、Windowsの%USERPROFILE%/.ssh/configファイルで行う必要がある(WSLインスタンス上のファイルではなく)ことも意味します。

SSHリクエストを転送させる

  • 1.次のコマンドを使って、Windowsホスト上で1Password SSHエージェントが実行されているかどうかを確認します。

PS C:\> ssh-add.exe -l

結果の例:

256 SHA256:2zmxMpLy5MeIx18pBUkumptKkKinlghygOvV6URe8QI Git Authentication Key (ED25519)

  • エージェントが実行中の場合、1つ以上のSSH鍵のリストが返されます。これらは、1PasswordにSaveしたSSH鍵であり、エージェントでSSHリクエストに使用できます。

  • 2.WSLインスタンスで次のコマンドを実行してWSLがSSHリクエストを正常に転送しているかどうかを確認します。

$ ssh-add.exe -l

結果の例:

256 SHA256:2zmxMpLy5MeIx18pBUkumptKkKinlghygOvV6URe8QI Git Authentication Key (ED25519)

Windowsホストでコマンドを実行したときと同じSSH鍵のリストが返されるはずです。その場合、WSLはSSHリクエストをWindowsホストに転送しています。 ssh-add.exe -lコマンドの実行時にSSH鍵がリストされない場合は、ヘルプを参照してください

  • 3.WSLにSSH鍵がリストされている場合は、コマンド内のsshをssh.exeに置き換えてSSHリクエストを実行してみてください。

例: $ ssh.exe -T [email protected]

SSHリクエストを承認するため、1Passwordからのプロンプトが表示されます。

WSL の SSH 認証プロンプト。

1Password SSHエージェントを使って、WindowsホストとWSLインスタンス間でSSHリクエストを転送できるようになりました。

ssh.exeを使うようにGitを設定する

1Password SSHエージェントを使ってWSLでGitコマンドを認証するにはcore.sshCommandとしてssh.exeを使うようにGitを設定できます。

この変数をグローバルに設定するには、WSLで次のコマンドを実行します。

$ git config --global core.sshCommand ssh.exe

SSHでGitコミットに署名する

⚠情報

1Password WSL統合によるSSH Gitコミット署名には、Git 2.34.0以降と64ビット版の Windows 10以降が必要です。Arm搭載のWindowsデバイスはサポートされていません。

Gitがssh.exeを使うように設定されている場合、統合を使ってWSLからGitコミットに署名することもできます。

WSLでSSHを使ってGitコミット署名をグローバルに設定するには:

  1. Windowsホストで1Passwordアプリを開き、使う SSH鍵を開きます。

  2. ⁝をクリックし[ Configure Commit Signing]を選びます。

  3. 次のウィンドウで、[Configure for Windows Subsystem for Linux (WSL)]チェックボックスをオンにし、[Copy Snippet]をクリックします。

  4. WSLインスタンスで、スニペットを~/.gitconfigファイルに貼り付けます。

WSL を構成するためのチェックボックスと構成スニペットが表示された「Git コミット署名の構成」ウィンドウ。

単一のリポジトリーでSSH署名を設定することもできます。

1PasswordはGit設定ファイルに次の変更を加えます。

  • gpg.formatをsshに設定します。

  • user.signingkeyを、コミットに署名するために選択した公開鍵に設定します。

  • commit.gpgsignをtrueに設定すると、各コミットに-Sフラグを含める必要がなくなります。 (オプション)

  • gpg.ssh.program1Passwordが提供するSSH署名バイナリーに設定します。

WSLでGitコミット署名を設定したら、Windowsホストと同じ手順を使って設定をテストできます。公開鍵を登録しコードをコミットしてコミットが署名されていることを確認します

オプション:SSHコマンドのためのエイリアスを追加する

Windowsホストで1Password SSHエージェントを使ってGit以外のSSHリクエストを認証する予定の場合は、オプションでssh.exeとssh-add.exeの代わりにコマンドラインでsshとssh-addを使用するエイリアスをBashプロファイルにCreateできます。

これは必須ではありませんが、全てのプラットフォームで同じSSHコマンドを使うと便利です。~/.bashrcまたは~/.bash_aliasesファイルに、次のエイリアスを追加します。

$ alias ssh='ssh.exe' $ alias ssh-add='ssh-add.exe'

認証モデル 1Password SSHエージェントは、他のプラットフォームと同様に、WSL統合で同じ認証モデルを使います。WSLセッションのSSH鍵リクエストを承認すると、現在のセッションのみがその鍵の使用を許可されます。新しいWSLセッションまたはタブを開くと、SSHリクエストを再度承認するように求められます。

1Password SSHエージェント認証モデルの詳細をご覧ください。

トラブルシューティング

WSLでssh-add.exe -lコマンドを実行したときにcommand not foundエラーが表示される場合は、OpenSSHがPATHにない可能性があります。完全な実行可能パスを使って、コマンドを再度実行してみてください。

$ /mnt/c/Windows/System32/OpenSSH/ssh-add.exe -l

それでもエラーが表示される場合は、相互運用性設定([interop])がWSL設定ファイルでオンになっていることを確認してください。オンになっている場合、エントリーは次のようになります。

[interop] enabled = true

代わりにenabled = falseが表示される場合は、enabled値をtrueに設定します。