LoginSignup
14
22

More than 1 year has passed since last update.

WSL2でYubikeyを用いたGPG, SSHをできるようにする。

Last updated at Posted at 2021-04-02

動機

私はGPGが好きです。GPGキーを1つ持っているだけで、パスワードやファイルの暗号化に、gitのコミット署名、SSHの認証キーとして利用できるからです。

私はYubikeyが好きです。U2Fのセキュリティキーとしても利用できますし、GPGキーの格納デバイスとしても利用できるからです。

YubikeyでGPGキーを管理すると、複数のマシンでGPGキーを保存しておく必要がなくなり、鍵管理が楽になります。

普段はUbuntu Desktopで作業していますが、WSLもこなれてきたのでWindowsで開発もありだなぁっと思えるようになりました。

なのでWSLでYubikeyを使いたい。

ということでやってみた。

前提

YubikeyにはすでにGPGキーの設定がされているものとします。

やり方はこれが一番詳しい

drduh/YubiKey-Guide

方法

Windows側での操作

gpg4winをインストール

gpgを利用できるように、gpg4winをインストールしてください。

#### PuTTYのインストール

~~SSHクライアントのPuTTYをインストールしてください。(もしかしたらいらないかも?)~~不要でした。

gpg-agent.confの設定

gpg-agentの設定ファイルgpg-agent.confを編集します
Windows 10の初期設定だと、C:\Users\%USERNAME%\AppData\Roaming\gnupg\gpg-agent.confにあります。

下記を追加してください

enable-putty-support

gpg-connect-agent /byeの自動起動設定

パソコンを起動したときにgpg-agentを自動起動するように設定します。

自分はgpg-agent.vbsというファイルを作成して、スタートアップに登録しています。

方法
  • Win + Rshell:startupを入力してスタートアップフォルダを開く
  • gpg-agnet.vbsというファイルに以下を記述。画面表示をしないように設定しています。
Set objWShell = CreateObject("Wscript.Shell") 
objWShell.run "gpg-connect-agent /bye", vbHide 

以上でWindows側の設定は終了です。

WSL(Linux)側での操作

WSL側の設定を行います。WSLのシェルのなかで作業してください。

今回、WSL側からgpg-agnetを利用するために、wsl2-ssh-pageantを使います。

wsl2-ssh-pageantのREADMEと同じことを書いています。

wsl2-ssl-pagent は、socatssを必要とします。必要に応じて各ディストリビューションの方法でインストールしてください。Ubuntuの場合、以下のコマンドでインストールできます。

sudo apt-get install socat

wsl2-ssl-pagentをダウンロードし、実行権限を付与します。

mkdir ~/.ssh
wget https://github.com/BlackReloaded/wsl2-ssh-pageant/releases/download/v1.3.0/wsl2-ssh-pageant.exe -O ~/.ssh/wsl2-ssh-pageant.exe
chmod +x ~/.ssh/wsl2-ssh-pageant.exe

~/.bashrcに以下を記載します。

# SSH
export SSH_AUTH_SOCK="$HOME/.ssh/agent.sock"
if ! ss -a | grep -q "$SSH_AUTH_SOCK"; then
  rm -f "$SSH_AUTH_SOCK"
  wsl2_ssh_pageant_bin="$HOME/.ssh/wsl2-ssh-pageant.exe"
  if test -x "$wsl2_ssh_pageant_bin"; then
    (setsid nohup socat UNIX-LISTEN:"$SSH_AUTH_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin" >/dev/null 2>&1 &)
  else
    echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable."
  fi
  unset wsl2_ssh_pageant_bin
fi

# GPG
export GPG_AGENT_SOCK="$HOME/.gnupg/S.gpg-agent"
if ! ss -a | grep -q "$GPG_AGENT_SOCK"; then
  rm -rf "$GPG_AGENT_SOCK"
  wsl2_ssh_pageant_bin="$HOME/.ssh/wsl2-ssh-pageant.exe" 
  config_path="C\:/Users/<username>/AppData/Local/gnupg" # <- ユーザー名の箇所を書き換える
  if test -x "$wsl2_ssh_pageant_bin"; then
    (setsid nohup socat UNIX-LISTEN:"$GPG_AGENT_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin -gpgConfigBasepath ${config_path} -gpg S.gpg-agent" >/dev/null 2>&1 &)
  else
    echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable."
  fi
  unset wsl2_ssh_pageant_bin
fi

再起動

変更内容を適用するためにパソコンの再起動、またはgpg-agentの再起動とWSLの再起動を行ってください。

gpg-agentの再起動

Windows側で

gpg-connect-agent.exe killagent /bye
gpg-connect-agent.exe /bye

WSLインスタンスの再起動

Windows側

WSLのディストリビューション名を調べる。

wsl -l -v

出力

  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2

WSLのディストリビューションを終了する

wsl -t Ubuntu-20.04

終了した後、WSLを起動する

動作確認

WSLからYubikeyが認識しているか

~$ gpg --card-status
Reader ...........: Yubico YubiKey OTP FIDO CCID 0
Application ID ...: *****************************************
Application type .: OpenPGP
Version ..........: 2.1
Manufacturer .....: Yubico
Serial number ....: ********
Name of cardholder: [not set]
Language prefs ...: [not set]
Salutation .......:
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: not forced
Key attributes ...: rsa4096 rsa4096 rsa4096
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: **** **** **** **** ****  **** **** **** **** ****
      created ....: 1970-01-01 00:00:00
Encryption key....: **** **** **** **** ****  **** **** **** **** ****
      created ....: 1970-01-01 00:00:00
Authentication key: **** **** **** **** ****  **** **** **** **** ****
      created ....: 1970-01-01 00:00:00
General key info..: [none]

WSLからYubikeyを利用してSSHが利用できるか

$ ssh -t git@github.com
Hi Ouvill! You've successfully authenticated, but GitHub does not provide shell access.

動作しているのを確認できたら完了。お疲れ様でした。

参考

BlackReloaded/wsl2-ssh-pageant
WSLでYubikeyを使う
[Windows] バッチファイル(.bat)を非表示・最小化した状態で起動する
SSH authentication using a YubiKey on Windows
(PCではなく)WSL2のみを終了、再起動する方法

14
22
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
22