landrunner’s blog

しばらく開発から離れてた人間が、技術的キャッチアップを図るための勉強ブログ

VSCode Remote developmentを使ってProxy下にあるマシンからクラウド上のサーバで開発できるようにする

想定環境

想定環境としてはこんな感じで、Windowsのクライアント上にあるVS Codeからクラウド上のサーバへRemote Developmentののため接続をします。

VSCodeはクライアントにインストールされたsshコマンドを利用してサーバへ接続します。

ここで問題になるのが以下の点です。

  • そもそもProxyは外部の22番ポートへのアクセスを認めていないことが多い
  • 素のsshコマンドは単独でProxy経由での接続機能がなく、Proxy接続を行うためのconnectコマンドはwindows版が提供されていない
  • プロキシ経由での接続を行えるPuttyTeraTermVSCodeでは使えない

2つ目と3つ目はどっちか1つ解決できればいいです。

今回は2つ目の方をターゲットにやっていきましょう。

ssh待ち受けポートの変更

22番ポートへのアクセスを認めてくれない問題はサーバ側の待ち受けポートを443番ポートに変更して対処します。

一旦サーバへログインして以下の通り設定を書き換えましょう。

$ sudo echo "Port 443" >> /etc/ssh/sshd_config
$ sudo systemctl restart ssh

443はhttpsのポートなので大抵の場合うまくいきます。

入りたいサーバのsshポートが書き換えられない場合、クラウド側に踏み台サーバを用意するなど、いくつかやり方はあると思います。

connectコマンドのインストール

インストール方法はざっと調べたところざっと3通り。

  1. ソースコードを探し、windows環境下でコンパイル
  2. CygwinMinGWを入れてconnect-proxyをインストール
  3. その他、connectコマンドが含まれているソフトをインストール

1はソースコードを探すのがちょっと面倒なのと、そのままコンパイルできるか不明なのでパス。

2はWSLがある今、CygwinMinGWを必要とすることもそうありません。 connectコマンドのためだけに入れるのはちょっと避けたいところです。

というわけで消去法的に3なのですが、なんとGit for windowsをインストールしたら入っていました。

https://gitforwindows.org/

MinGWコンパイルされたやつなので結局2と同じではあるのですが、Gitなら入れておいても使う機会はあるでしょう。

というわけでこれを使いましょう。

パスを通すと他と重複する可能性があるので、とりあえずフルパスで使うことにします。

.ssh/configの編集

Windowsクライアントから以下のコマンドを打つとsshのconfigファイルが開きます。

> code $HOME/.ssh/config

これを次のように編集します。

Host ubuntu-cloud 
  HostName <ubuntu-cloud-ip-address>
  Port 443
  User ubuntu
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand C:\Program Files\Git\mingw64\bin\connect.exe <proxy-hostname>:<proxy-port> %h %p
  ForwardAgent yes

ここで、<ubuntu-cloud-ip-address>, <proxy-hostname>, <proxxy-port>は環境に合わせて書きなおしてください。

VSCodeからのRemote Development機能の利用

vscodeからリモート接続を選択すると、設定ファイルに設定したホストが表示されています。

ここで+を押してクラウド上のサーバにつながれば成功です。