💡

Cloudflare Zero TrustでSSH接続

2023/11/09に公開

はじめに

最近研究でニューラルネットワークを扱っているのですが、研究が進むに連れてモデルもどんどん大きくなってきました。今まで使っていたGPU対応のVMではそろそろ限界だし、グレードを上げるにしても結構な金額になってしまいます。何かいい方法ないかな〜と探し回っていたところ、なんと社内にA100が転がっていました、、
1年くらい前に別の研究で必要になり購入したらしいですが、それ以来塩漬けになっていたそうです。Jijではリモートワークが主体なので、会社に来ないと使えないという制約がこのマシンが放置されていた原因です。これを使わない手は無いという事で、ローカルネットワーク内のマシンでもCloudflare Zero Trustを使えば簡単にSSH接続できるようになるよ、というのが今回のお話です。

概要

この記事では主に以下の内容を説明をします。

  • Cloudflare Zero TrustのGUIでトンネルを作成する方法
  • クライアントの設定

以下の内容は説明しません。

  • Cloudflare Zero Trustの初期設定
  • CLIでの設定

アカウントやドメインは既に持っていることを前提としています。初期設定が済んでいない場合は以下を参照してください。
https://developers.cloudflare.com/cloudflare-one/setup

環境

  • ubuntu 20.04 LTS x86_64

Cloudflare Dashboardへアクセス

それではCloudflare Zero Trustで設定を進めていきましょう。まずはダッシュボードを開き、ご自身のアカウントを選択してください。

トンネルを作成する

Cloudflare Zero Trustを使ってSSHトンネルを作成していきます。以下の公式ドキュメントを参考に設定方法を順に紹介していきます。
https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/

1. 画面左のメニューから「Zero Trust」→「Access」→「Tunnels」と進み、「+create a tunnel」をクリック

2. 適当なトンネル名をつけて、「save tunnel」をクリック

3. サーバーにcloudflaredをインストール

Debian,64-bitなど環境毎にインストールコマンドを用意してくれるので、コピーしてサーバー側にcloudflaredをインストールします。cloudflaredはサーバーにもクライアントにも必要です。

4. Public Hostnamesの設定

以下の項目を入力し、「save」をクリックします。
Subdomain:任意
Domain: 候補の中から選択
Type: SSH
URL: localhost:22

アプリケーションの追加

続いてアプリケーションを追加していきます。

1. 左側のメニューから「Access」→ 「Applications」を選択し、「Add an application」をクリック

2. Self-hostedを選択しアプリケーションの設定を入力

以下の項目を入力し、「Next」をクリックします。
Application name: 任意
Session Duration: 任意
Subdomain: トンネルを作成した時と同じSubdomain
Domain: 候補の中から選択
他にも色々と設定できますが、最低限これだけ入力すればOKです。追加の設定の詳細はこちらを確認してください。

3. 適当なポリシー名を入力

ポリシー名を入力し「Next」→「Add application」をクリックすれば完了です。

SSH接続

さて、Cloudflare Zero TrustでSSHトンネルを無事作成できたので、後はクライアント側の設定を適切に行えばSSH接続できる筈です。

1. クライアントサイドでcloudflaredをインストールする

OSによってインストール方法が異なるのでご注意ください。
macの場合:
brew install cloudflare/cloudflare/cloudflared
他のOSについては、以下のページを確認してください。
https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/
(サーバー側にもインストールするのをお忘れなく)

2. SSH configファイルを変更する

~/.ssh/configに以下を記述してください。

Host jij-a100(なんでもOK)
    HostName <subdomain>.<domain>
    ProxyCommand /opt/homebrew/bin/cloudflared access ssh --hostname %h

<subdomain>, <domain>にはトンネル作成時に設定した値が入ります。
ProxyCommandはwhich cloudflared などでパスを確認し、cloudflaredのパスを指定してください。macの場合は/opt/homebrew/bin/cloudflaredになっていると思います。

3. ssh接続する

あとはいつもと同じようにsshコマンドを叩いてください。
ssh <username>@jij-a100
初回にブラウザが立ち上がり、認証を求められると思います。適当なIdPを選択し、手続きを進めてください。

Approveして、

Successが出れば完了です!

まとめ

今回はCloudflare Zero Trustでローカルネットワーク内のPCにSSH接続する方法を説明しました。これを使えば自宅のPCや研究室のPCなどにも安全にアクセスできます。簡単に設定できるのでリモートアクセスしたいけど色々面倒臭そうだなーと思って困っている方は是非試してみてください。

Discussion