1PasswordのSSH AgentをWSL2で使う方法

目次

概要

1Passwordの機能の一つである、SSH Agentの機能をWSL2でも使えるようにする方法を紹介します。

環境

  • Windows 22H2
    • 1Password 8.10.0
  • Windows Subsystem Linux 1.1.3.0
    • Ubuntu 22.04

やりたいこと

1Passwordには、独自のSSH Agentが付属しています。このSSH Agentを使うことで、SSHの公開鍵認証時に、暗号化された1Password上へ保存された秘密鍵の情報を利用できます。

ファイルをパソコン上に平文で保存していないので、通常の状態よりも安全であると言えます。

私もこの機能を使っており、公式のヘルプ記事を参考に設定してWindowsで利用できるように設定してあります。

しかし、それだけでなくWindows上のWSLからsshコマンドなどで接続するときに、Windows上の1PasswordのSSH Agentを利用して接続するようにしたいです。

そこで、ここではWSLから1PasswordのSSH Agentを介してSSH接続する方法を説明します。

方法

やることはそれほど多くありません。基本的には、WindowsのSSH Agentを参照できるようにWindowsとWSL両方を設定してバイパスするだけです。

1Password自体の、SSH Agentを使う設定についてはここでは詳しく説明しません。うまくいけば、Windows Helloなどの設定をした後に、1Passwordの設定から、「開発者」>「SSH エージェントを使用する」にチェックを入れるだけで終わりです。

最初にWindowsの設定をします。

Windowsにnpiperelayというソフトウェアをダウンロードします。

Releases · jstarks/npiperelay

ダウンロードした後は、ファイルを解凍して適当な所に起きます。私は、ドキュメントのappフォルダの中に起きました。

これでWindowsの設定は終わりです。

次にWSLの設定をします。WSLのOSはUbuntu 22.04を利用しています。試してはいませんが、DebianやCentOSなどでも同様の方法で動くはずです。

設定は、ユーザーディレクトリの.bashrcに追記します。

# 1PasswordのSSHエージェントに接続するための設定
export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
ALREADY_RUNNING=$(ps -auxww | grep -q "[n]piperelay.exe -ei -s //./pipe/openssh-ssh-agent"; echo $?)
if [[ $ALREADY_RUNNING != "0" ]]; then
    if [[ -S $SSH_AUTH_SOCK ]]; then
        echo "removing previous socket..."
        rm $SSH_AUTH_SOCK
    fi
    echo "Starting SSH-Agent relay..."
    (setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"/mnt/c/Users/<ユーザー名>/Documents/app/npiperelay_windows_amd64/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork &) >/dev/null 2>&1
fi

下から2行目の/mnt/c/Users/<ユーザー名>/Documents/app/npiperelay_windows_amd64/npiperelay.exeの部分はそれぞれの環境に合わせて設定を変更してください。このパスは、上記でダウンロードしたnpiperelayをダウンロードした場所を記述します。

設定後、次のコマンドを実行して設定を反映させます。

source ~/.bashrc

設定に間違いが無ければこれで設定は終わりです。WSL上からsshコマンドなどでサーバーに接続すると1PasswordのSSH Agentが使われます。

さいごに

Windowsでダウンロードしたnpiperelayは開発が止まっているようで、バグなど不具合があるかもしれません。利用の際には、注意が必要です。ただ、私の環境では何か困ったことはまだ起きていないため、現在も利用しています。

設定箇所は多くないため、比較的簡単に導入できると思います。

みなさんの参考になれば嬉しいです。