Closed3

多段 SSH でポート開放されてない自宅のマシンに入って開発する

まちゅけんまちゅけん

ポート開放されてない自宅のマシンに外出先から入って開発したい

背景・課題

  • 自宅に Linux マシン (サーバー) がある
  • 自宅ではデスクトップやラップトップから Linux マシンに VS Code の Remote - SSH で入って開発している
    • デスクで集中していても、ソファーでリラックスしていても、同じ環境同じ作業状況で開発できるのが良い
    • 作業を中断するときに、ファイルを共有する目的だけの git commit, push をしなくていい
  • しかし、自宅のネットワーク環境はポート開放できないので、外で同じように SSH で入って開発できない
    • 外 (職場) でこっそり開発できるようになる
  • クラウドに踏み台のサーバーを建てて、多段 SSH で自宅のマシンに入って開発する
    • クラウドに開発用のサーバーを建てても良いが、ちょっとコストが高い
    • 踏み台サーバーなら無料 (GCP) ~ 安く建てれる
まちゅけんまちゅけん

必要なもの・登場人物記号

  • 🐧 自宅 Linux マシン
  • ⛅ クラウド VM
  • 💻 クライアント PC

事前準備

  1. 🐧 と 💻 のそれぞれで鍵を作成する
🐧 & 💻 Shell
ssh-keygen -t ed25519
  1. ⛅ を建てる、1. の公開鍵を設定する
  1. 🐧 と 💻 のそれぞれで ⛅ に接続する設定ファイル (~/.ssh/config) を作成する
🐧 & 💻 ~/.ssh/config
Host *
    StrictHostKeyChecking no
    ServerAliveInterval 60

Host cloud-server
    Hostname xx.xxx.xxx.xxx
    User username
  1. 🐧 と 💻 のそれぞれで ⛅ に通常の SSH 接続ができることを確かめる
🐧 & 💻
ssh -T cloud-server hostname

hostname が表示されたら OK、なんかのエラーになるなら鍵の設定などを見直す。

まちゅけんまちゅけん

手順

  1. 🐧 から ⛅ へのトンネルを作る
🐧 Shell
ssh -fnNT -R 2222:localhost:22 cloud-server

-R オプションによってリモートポート転送が行われるトンネルが作成される。
つまり、⛅:2222 宛ての通信が 🐧:22 に転送される。
これによってポート開放ができない自宅ネットワークでも、🐧 に SSH 接続が可能になる。

他のオプションによって SSH 接続がバックグラウンドで実行などされる。
これによって SSH トンネルがターミナルセッションを抜けても持続する。

  1. 💻 に ⛅ のトンネルを経由して 🐧 へ接続する為の設定をする
💻 ~/.ssh/config
Host ssh-server-tunnel
    Hostname localhost
    Port 2222
    User username
    ProxyJump cloud-server

ProxyJump によって ⛅ を踏み台にして 🐧 に接続できるようになる。
Hostname は ⛅:2222 がそのまま 🐧:22 に繋がっているので localhost のままでよい。

  1. 💻 から ⛅ のトンネルを経由して 🐧 へ接続するテストをする
💻 Shell
ssh -T ssh-server-tunnel hostname

🎉

これで hostname が表示されたらトンネルを経由した SSH 接続は成功

VS Code Remote - SSH などからも接続できるようになる ✅

SSH トンネルについての参考文献
https://robotmoon.com/ssh-tunnels/

このスクラップは2023/05/26にクローズされました