hidemium's blog

日々学んだことをアウトプットする。

踏み台サーバーを経由したVisual Studio CodeのRemote Developmentの設定

以前、Visual Studio CodeのRemote Developmentの設定方法について記事にしました。今回は、踏み台サーバーを経由して開発環境に接続する方法を記載してみようと思います。

hidemium.hatenablog.com

構成

  • Windows 10 (Visual Studio Code)
  • Ubuntu 22.04 (踏み台サーバー)
    • public IP: 192.168.100.100/24
    • internal IP: 192.168.10.100/24
  • Ubuntu 22.04 (接続先)
    • internal IP: 192.168.10.200/24

踏み台サーバーと接続先のサーバーの設定

踏み台サーバーのインターフェイスに外部接続用のIPアドレスとプライベートネットワークのIPアドレスを設定しておきます。

Visual Studio Codeの接続先となるサーバーのインターフェイスにプライベートネットワークのIPアドレスを設定しておきます。

それぞれにWindowsで生成した公開鍵を設定しておきます。

公開鍵の設定は、cloud-initを使うとログインせずに設定できます。

hidemium.hatenablog.com

ssh configの設定

以下のように C:\Users\User Name\.ssh/config ファイルを編集します。

Host bustion
  HostName 192.168.100.100
  User UserName
  ForwardAgent yes

Host dev
  HostName 192.168.10.200
  User UserName
  ProxyJump bustion

ForwardAgentは、秘密鍵を踏み台サーバーに置かずにアクセスするためのssh agent機能を使う設定となります。

ProxyJumpは、踏み台サーバーを経由してターゲットサーバーにssh接続するオプションで、以前はProxyCommandが使われていましたが、ProxyJumpはシンプルに記述ができます。

Visual Studio CodeのRemote Developmentの設定 (Windows 10側)

右下のグリーンの >< ボタンをクリックすると、メニューが表示されるため、 Connect to Host をクリックします。

ssh configに設定した踏み台サーバーを経由した接続先のホスト名をクリックします。

platformに Linux を選択します。

vscodeのファイルがインストールされて、接続が完了します。

Local Port Forwardingの利用

Local Port Forwardingを利用して、8000番のポートに届いた通信を踏み台サーバーを経由して接続先のサーバーの8000番ポートへ転送ができるか試してみます。

通信を確認するために、pythonでWebサーバーを起動してみます。

python3 -m http.server 8000

以下のように C:\Users\User Name\.ssh/config ファイルを編集すると、Local Port Forwardingができます。

Host bustion
  HostName 192.168.100.100
  User UserName
  ForwardAgent yes

Host dev
  HostName 192.168.10.200
  User UserName
  ProxyJump bustion
  LocalForward 8000 localhost:8000

PowerShellsshコマンドで接続して、Local Port Forwardingができるか確認してみます。

ssh先で何もしないため、-Nオプションを指定しておきます。

ssh -N dev

ブラウザからlocalhost:8000にアクセスし接続できることを確認します。

python3 -m http.server 8000
127.0.0.1 - - [01/Dec/2024 00:26:49] "GET / HTTP/1.1" 200 -

また、vscodeでもLocal Port Forwardingができます。

ssh configでLocalForwardの設定を戻し、vscodePORTS を開いて、 Forward a Port ボタンをクリックします。

同様に、ブラウザからlocalhost:8000にアクセスし接続できることを確認します。