VSCode Remote developmentを使ってProxy下にあるマシンからクラウド上のサーバで開発できるようにする
想定環境
想定環境としてはこんな感じで、Windowsのクライアント上にあるVS Codeからクラウド上のサーバへRemote Developmentののため接続をします。
VSCodeはクライアントにインストールされたsshコマンドを利用してサーバへ接続します。
ここで問題になるのが以下の点です。
- そもそもProxyは外部の22番ポートへのアクセスを認めていないことが多い
- 素のsshコマンドは単独でProxy経由での接続機能がなく、Proxy接続を行うためのconnectコマンドはwindows版が提供されていない
- プロキシ経由での接続を行えるPuttyやTeraTermはVSCodeでは使えない
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はソースコードを探すのがちょっと面倒なのと、そのままコンパイルできるか不明なのでパス。
2はWSLがある今、CygwinやMinGWを必要とすることもそうありません。 connectコマンドのためだけに入れるのはちょっと避けたいところです。
というわけで消去法的に3なのですが、なんとGit for windowsをインストールしたら入っていました。
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からリモート接続を選択すると、設定ファイルに設定したホストが表示されています。
ここで+を押してクラウド上のサーバにつながれば成功です。