Closed3
多段 SSH でポート開放されてない自宅のマシンに入って開発する
ポート開放されてない自宅のマシンに外出先から入って開発したい 。
背景・課題
- 自宅に Linux マシン (サーバー) がある
- 自宅ではデスクトップやラップトップから Linux マシンに VS Code の Remote - SSH で入って開発している
- デスクで集中していても、ソファーでリラックスしていても、同じ環境同じ作業状況で開発できるのが良い
- 作業を中断するときに、ファイルを共有する目的だけの git commit, push をしなくていい
- しかし、自宅のネットワーク環境はポート開放できないので、外で同じように SSH で入って開発できない
外 (職場) でこっそり開発できるようになる
-
クラウドに踏み台のサーバーを建てて、多段 SSH で自宅のマシンに入って開発する
- クラウドに開発用のサーバーを建てても良いが、ちょっとコストが高い
- 踏み台サーバーなら無料 (GCP) ~ 安く建てれる
必要なもの・登場人物記号
- 🐧 自宅 Linux マシン
- ⛅ クラウド VM
- 💻 クライアント PC
事前準備
- 🐧 と 💻 のそれぞれで鍵を作成する
🐧 & 💻 Shell
ssh-keygen -t ed25519
- ⛅ を建てる、1. の公開鍵を設定する
- 🐧 と 💻 のそれぞれで ⛅ に接続する設定ファイル (
~/.ssh/config
) を作成する
🐧 & 💻 ~/.ssh/config
Host *
StrictHostKeyChecking no
ServerAliveInterval 60
Host cloud-server
Hostname xx.xxx.xxx.xxx
User username
- 🐧 と 💻 のそれぞれで ⛅ に通常の SSH 接続ができることを確かめる
🐧 & 💻
ssh -T cloud-server hostname
hostname
が表示されたら OK、なんかのエラーになるなら鍵の設定などを見直す。
手順
- 🐧 から ⛅ へのトンネルを作る
🐧 Shell
ssh -fnNT -R 2222:localhost:22 cloud-server
-R
オプションによってリモートポート転送が行われるトンネルが作成される。
つまり、⛅:2222 宛ての通信が 🐧:22 に転送される。
これによってポート開放ができない自宅ネットワークでも、🐧 に SSH 接続が可能になる。
他のオプションによって SSH 接続がバックグラウンドで実行などされる。
これによって SSH トンネルがターミナルセッションを抜けても持続する。
- 💻 に ⛅ のトンネルを経由して 🐧 へ接続する為の設定をする
💻 ~/.ssh/config
Host ssh-server-tunnel
Hostname localhost
Port 2222
User username
ProxyJump cloud-server
ProxyJump
によって ⛅ を踏み台にして 🐧 に接続できるようになる。
Hostname
は ⛅:2222 がそのまま 🐧:22 に繋がっているので localhost のままでよい。
- 💻 から ⛅ のトンネルを経由して 🐧 へ接続するテストをする
💻 Shell
ssh -T ssh-server-tunnel hostname
🎉
これで hostname
が表示されたらトンネルを経由した SSH 接続は成功
VS Code Remote - SSH などからも接続できるようになる ✅
SSH トンネルについての参考文献
このスクラップは2023/05/26にクローズされました