Cloudflare Tunnelで自宅にSSH (2026-02版)
ポート開放なしで、インターネットから自宅サーバにSSHする方法をやってみた手順の記録。
前提
サーバー:Debian
クライアント:Windows 11
- Cloudflareアカウントとカスタムドメインを持っていること
- サーバーは既にSSHログインができるようになっている。かつ、パスワード認証を禁止し鍵認証のみにするなどセキュア化が済んでいること(参考:Debian 13 trixie setup (2025-09版) - skoshbyte)
サーバーにcloudflaredをインストール
Downloads · Cloudflare One docs
トンネルを作成する
Create a tunnel (dashboard) · Cloudflare One docs
- ブラウザでCloudflareダッシュボードにサインイン
- Network > Connectors > Cloudflare Tunnels 画面から Add a Tunnel をクリック
- 任意のトンネル名を入力してSave
- Saveするとインストールコマンドが表示されるので、そのままコピペして実行
次のコマンドでトンネル情報が表示される
- Next をクリックし、Published application タブで任意のサブドメイン名とサービスを指定して Save
- Hostname: sshgw.mydomain.com
- Service: SSH://localhost:22
クライアントにcloudflaredをインストール
クライアント側にも cloudflaredをインストールする。
Downloads · Cloudflare One docs
$env:localappdata\Microsoft\Winget\Packages\Cloudflare.... の中に cloudflared.exe ができているので、これを使いやすい場所に移動しておく (c:\toolsなど)
SSH鍵セットアップ
-
クライアント側でキーを作成
-
公開鍵の方をサーバーの
authorized_keysに登録 - クライアント側の
~/.ssh/configを設定
Host tun
Hostname sshgw.mydomain.com
User myuser
IdentityFile ~/.ssh/ed-tun
ProxyCommand C:\tools\cloudflared.exe access ssh --hostname %h
ssh tunでSSHログインできる。
セキュリティについて
Access Policy機能を使用して追加の認証レイヤーも設定できるそうだが、サーバー側で鍵認証以外禁止にしていて、クライアント側の鍵にもパスフレーズを設定しているので、個人の限定的な利用としてはいったんこれでいいかなと。
あまりにも簡単で拍子抜けした一方で、これは企業側でブロックするの難しそうと思うなどした。