18
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VS Code の Remote Development は仕組みを理解してないと危ない

Last updated at Posted at 2022-09-22

Visual Studio Code には便利な Extension が色々ありますよね
Remote Development に含まれる Remote SSH というのを便利だから使っていたんですが
ちょっと問題を起こしてしまったので備忘録です
当時は無知だった故にかなり恥ずかしいことをやらかしました。

経緯

  • とある仕事の開発環境がAWSのインスタンス上に構築
  • ローカルで扱うことが禁止されていたデータが有り、ローカルでの動作確認が無理だったので編集はローカル、確認はファイルを都度アップロードしサーバー上でするプロジェクトだった
  • vim で直接いじるの慣れてなくて辛いし編集した都度 winscp でやり取りするのもなぁ
  • 軽くググったら Remote SSH で直接編集できるし便利だな、みんなでこれ使うか!
  • 管理者「それちょっとやばいんで使うのやめてください」

何が起きていたか

Remote SSH (Remote Development) の仕組みは単にSSH接続してファイル編集できるというものではなく
接続した先の環境上に vscode-server というのをインストールして VScode の機能を持った中継サーバーを起動させ
そこに接続してサーバー上のファイルを直接編集できるようにするといったものです。
この vscode-server が曲者でサーバーリソースを遠慮なくバカ食いしていくものでした。


実体は、ホスト側に .vscode-server などという怪しいディレクトリを作り node を始めとしたバイナリを流し込みたった 65536 個しかないポートの 1 つを勝手に奪い(内部でポートフォワーディングをしているらしい)、メモリと CPU をバカ食いする node のサーバを建てるという凶悪な仕様になっている。
しかもなんと最高なことに、向こうのサーバでダウンロードに失敗するとこちらでダウンロードして scp して注ぎ込む仕様にすらなっている(設定で変えられる)。鬼か。

※引用元記事
https://qiita.com/Ishotihadus/items/469b8f59ce74333a0a2e#remote-development


起動された vscode-server を ps で確認してみるとこのような感じ

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
(略)
myuser  2538  0.0  0.0 119848   188 ?        S    00:03   0:00 sh /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/server.sh --start-server --host=127.0.0.1 --enable-remote-auto-shutdown --port=0 --connection-secret /home/myuser/.vscode-server/.622cb03f7e070a9670c94bae1a45d7
myuser  2546  0.0  2.7 1008360 56036 ?       Sl   00:03   0:17  \_ /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/node /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/out/vs/server/main.js --start-server --host=127.0.0.1 --enable-remote-auto-shutdo
myuser  2680  2.9  5.7 1204864 114760 ?      Sl   00:03  13:41      \_ /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/node /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/out/bootstrap-fork --type=extensionHost --uriTransformerPath=/home/myuser
myuser  2716  0.6 15.3 1139148 307560 ?      Sl   00:03   2:50      |   \_ /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/node /home/myuser/.vscode-server/extensions/bmewburn.vscode-intelephense-client-1.6.3/node_modules/intelephense/lib/intelephense.js --node-ipc --client
myuser  2691  0.0  1.1 881344 22788 ?        Sl   00:03   0:06      \_ /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/node /home/myuser/.vscode-server/bin/622cb03f7e070a9670c94bae1a45d78d7181fbd4/out/bootstrap-fork --type=watcherService

当時の開発環境のメモリは2GBでした、その上でなんか使用率15%とか見えますね

[myuser@ip-XXX-XX-XX-XXX .vscode-server]$ pwd
/home/myuser/.vscode-server
[myuser@ip-XXX-XX-XX-XXX .vscode-server]$ du -sh *
408M    bin
101M    data
75M     extensions

インストールされた vscode-server のファイルサイズもなかなか男前ですね

こんなにリソースを食っているが 真に恐ろしいのは個人専用である ということ
別の人が同じ環境に Remote SSH を使った場合、新たにその人専用の vscode-server がインストールされて
リソースバカ食いする node を新しく立ち上げてサーバーリソースを容赦なく圧迫します。

これをチーム内の3人くらいがそれぞれ使ってた結果、開発環境の大部分のリソースを食い尽くし
サーバーがダウン寸前まで行く不調を起こして注意を受けたということがありました

結論

  • Remote SSH(Remote Development) は便利だけどヤバい、共用の環境には絶対使わない方がいい
  • ベタ褒めする記事ばっかり見つかるから気軽に使用されそう、実際その一人だった
  • 共有する環境ではなく確実に個人だけが使う環境なら自己責任で使う選択肢はある

代替策

sftp という拡張機能を使うようにしました。
https://rfs.jp/sb/vsc/vscsftp.html

リモート編集しているのとほぼ変わらない操作感だったので便利でした
少なくとも今回やりたかったことはsftpで充分カバーできた

18
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?