☁️

Cloudflare Tunnelを使ってSSHする

2022/09/08に公開

つい先日 Raspberry Pi 4 Model B (8GB) を購入し、別のマシンや外出先からリモートで SSH できるようにしようと思っていたところ Cloudflare Zero Trust の Cloudflare Tunnel というものを知人から知ったので使ってみることにした。

前提条件

  • ネームサーバーを Cloudflare にしていること

Tunnel を作る

著者はダッシュボードを使う方法を使用したので、そちらだけ記事に書かせていただきます。
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/remote/#set-up-a-tunnel-remotely-dashboard-setup

コマンドラインだけで設定するには公式のドキュメントを読んでみてください。
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/local/#set-up-a-tunnel-locally-cli-setup

  1. Cloudflare Zero Trust のダッシュボードへアクセスする
  2. Access > Tunnelsへ移動して、Create a tunnelをクリック
  3. Tunnel nameに名前を入力
  4. 使っている OS とアーキテクチャを選択して、手順に従いcloudflaredをサービス化する
  5. Route tunnelでドメインを設定し、ServiceSSH、URL にlocalhost:22を設定

アプリケーションを追加

  1. Cloudflare Zero Trust のダッシュボードへアクセスする
  2. Access > Applicationへ移動して、Add an applicationをクリックしSelf-hostedを選択
  3. Application domainにはRoute tunnelに設定したドメインと同じものを設定
  4. Nextをクリックして、ポリシーやその他の設定を終えたらAdd applicationをクリックして完了

SSH で接続する

サーバー側

Cloudflare Tunnel を使うとSSH ポートを開放する必要がないので、ファイヤーウォールの設定の設定とかは特に必要ありません。

rootでログインさせないとか、パスワード認証使えないようにするとか最低限の設定だけしておけば大丈夫

Browser Rendering を使う場合

Short-lived certificatesの公開鍵を登録しておかないと毎回開くたびに公開鍵をよこせと要求されてしまうので、sshd_configTrustedUserCAとして設定しておきましょう。

まずは公開鍵を作成して、入手します。

  • Cloudflare Zero Trust のダッシュボードへ移動
  • Access > Service Auth > SSHの順で移動
  • 作成したアプリケーションを選択して、Generate certificateをクリック
  • 公開鍵をコピーして、/etc/ssh/ca.pubに内容を貼り付けて作成

sshd_configには以下のように設定を追加する

sshd_config
+PubkeyAuthentication yes
+TrustedUserCAKeys /etc/ssh/ca.pub

クライアント側

ssh-copy-id等などの手段を用いてサーバーに公開鍵を登録しておきましょう。

Short-lived certificatesを用いれば鍵作って登録して~みたいなことすらせずに済むのですが、何故かうまくいかなかったので著者は自分で作った鍵を登録する形にしました。

https://developers.cloudflare.com/cloudflare-one/identity/users/short-lived-certificates

~/.ssh/config

~/.ssh/config
+Host ssh.example.com
+  User inkohx
+  IdentityFile 秘密鍵のパス
+  ProxyCommand cloudflared access ssh --hostname %h

https://developers.cloudflare.com/cloudflare-one/tutorials/ssh/#native-terminal

接続

ssh ssh.example.com

終わり

SSH in Browser できるのスマホからも操作できるしすごいけど、デスクトップからだとコピー&ペーストをショートカットキーでできないの地味に不便だったりする。

Discussion