2026年版・Cloudflare Tunnel で WSL 環境に SSH 接続する

過去にほぼ同じことをしたんだけど、メインマシンを変えたので設定をやり直した。何か前回よりも簡単だった感覚があるのでメモ。

今回はデスクトップ PC の WSL 環境に対して、外出先でノート PC から SSH 接続をしたかったので、その前提での設定。

ホストマシンは cloudflaredssh.service (sshd) を設定する

ということでまずはデスクトップ PC の WSL 環境で clouflared をインストールする。Cloudflare の管理画面でインストール用コマンドが全て提供される。以下はそのコピペ。

# Add Cloudflare GPG Key
$ sudo mkdir -p --mode=0755 /usr/share/keyrings
$ curl -fsSL <https://pkg.cloudflare.com/cloudflare-main.gpg> | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
# Add This Repo To Your Apt Repositories
$ echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] <https://pkg.cloudflare.com/cloudflared> any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
# Install cloudflared
$ sudo apt-get update && sudo apt-get install cloudflared

以上で cloudflared コマンドがインストールできる。この作業はホスト側もクライアント側も同じ。

ホスト側 (SSH 接続される側) では、以下のように cloudflared のサービスを有効にしておく。

# Install As Service (Host Only)
$ sudo cloudflared service install 【トークン・Cloudflare 管理画面で確認できる】

WSL も現在は以下のように、/etc/wsl.conf の設定で systemctl が有効になっているはず。

[boot]
systemd=true

なので $ systemctl status cloudflared とかで状況を確認し、必要であれば enable すれば良い。

パスワード認証自体の有効化・無効化や、鍵認証への切り替えなどは、ホスト環境の /etc/ssh/sshd_config にて設定し $ systemctl restart ssh.service で再起動する。

クライアントにも cloudflared を入れて SSH Config を書く

SSH 接続をするクライアント側にも前述のコマンドで cloudflared をインストールする。

~/.ssh/config で以下のように cloudflared を経由して接続するように書けば良い。

Host my-pc
  HostName      my-pc.example.com
  User          【WSL ユーザ名】
  ProxyCommand  cloudflared access ssh --hostname %h

最初は鍵認証ではなくパスワード認証で接続を確認したのだが、その際にパスワード認証を自動化する sshpass というコマンドラインツールがあることを知ったので、それも紹介しておく。以前にも同等のことを expect コマンドを使って実現したことがあるのだが、それを一つのコマンドにしてくれてる感じ。なんで当時このコマンドを入れなかったんだろう?w

$ sudo apt install sshpass

$ sshpass -p '【WSL パスワード】' ssh my-pc

こんな風にすればパスワード認証で SSH 接続もできる。

当然ながら、接続が確認できたらホストマシンの sshd で鍵認証のみ有効にするよう変更しておいた方がセキュア。