VS Code Remote Development を快適に使う トラブルシュート編

はじめに

もはや何番煎じの記事なのか不明ですが、 VS Code Remote Development を使ってみたので備忘録がてらに書くことにしました。この記事では導入自体はサボっている代わりに、2019/08/29 現在、遭遇するかもしれないトラブルについて書いておきます。

VS Code Remote Development って何?

https://code.visualstudio.com/docs/remote/remote-overview

公式サイトは上記の URL にあります。
端的に言えば、リモートサーバにあるディレクトリなどをマウントして、手元の VS Code で編集できるようにする機能です。便利ですね。

私が導入した構成

  • クライアント側: Windows 10 + VSCode
  • サーバ側: Linux (CentOS 7 や Ubuntu etc)

導入方法

たくさんの方が書かれているので、それらを参考にしましょう。

Visual Studio Codeに超絶便利な Remote Development を入れる
Windows10 VisualStudioCodeでRemote Devlopment

RemoteDevelopment タグで検索すると、いっぱい出てくるので抜粋しました。

トラブルシュート

Windows から踏み台ホストを経由して、接続できない

下記のような SSH config を書いているとします

Host jumpbox
    HostName example.edu.cn
    User U
    Port xxx
    IdentityFile xxx.id_rsa


Host remote
    HostName remote
    User U
    Port xx

Windows 版で踏み台ホスト(上記のコンフィグでは jumpbox)を経由してサーバに接続したい(上記のコンフィグでは remote)場合、下記のようなエラーが出ることがあります。

OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
debug1: Reading configuration data C:\\Users\\admin/.ssh/config
debug1: C:\\Users\\admin/ssh/config line 70: Applying options for server*.server.local
debug1: Executing proxy command: exec ssh -W %h:%p jumpbox
CreateProcessW failed error:2
posix_spawn: No such file or directory

そういうときには、.ssh/config にある ProxyCommand を下記のように修正すると、うまく動作するようになります。

ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe jumphost ssh -W %h:%p jumpbox

参考: https://github.com/microsoft/vscode-remote-release/issues/18#issuecomment-500713684

接続先サーバが Proxy を設定しないとインターネット外部に出ていけない環境にある

どういうことかというと、Remote Development の仕組み上、接続先サーバがインターネットにアクセスできるようにする必要があります。
挙動しか見ていないので、ざっくりですが、Remote Development では SSH で対象サーバに接続した後に、 vscode-server というプログラムを(おそらく)ホームディレクトリ以下にダウンロードして実行する仕組みになっています。
対象サーバ上で、 vscode-server を立ち上げて、クライアント(Windows etc)側から接続するって、 X Server っぽいですね。なんとなく。(接続の仕方は逆方向ですけど)

という構造がわかれば、勘の鋭い方はお気づきかもしれません。接続先サーバの自分のユーザの環境変数に下記を設定する必要があります。/home/username/.bashrcなど

export http_proxy=<Your proxy server ip and port>
export https_proxy=<Your proxy server ip and port>

または、内部で wget を利用しているので、 .wgetrc に書くのもアリですね。

参考: https://github.com/microsoft/vscode-remote-release/issues/898

Unauthorized client refused. というエラーが出る

接続先サーバのディストリビューションのバージョンが低いと遭遇するかもしれません。
(正確には libstdc++ が古いとなるんですけど)

そのときには下記のようなエラーが出ます

Failed to connect to the remote extension host server (Error: Connection error: Unauthorized client refused.) 

対象サーバ上にある /home/username/.vscode-server ディレクトリ配下にある .<適当なID>.log ファイルに下記のようなメッセージが出ていたら、まさしく該当しています

Error: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /root/.vscode-remote/in/473af338e1bd9ad4d9853933da1cd9d5d9e07dc9/node_modules/spdlog/build/Release/spdlog.node)

参考: https://github.com/microsoft/vscode-remote-release/issues/103

まとまらないまとめ

他の方が該当しそうなトラブルと対処法を書いてみました。
今まではサーバ上で vim でガリガリと書いていたのですが、手元では VSCode で書いていたので、エディタが統一できるのは嬉しい限りです。

とはいえ、上記のトラブルの通り、ディストリが古かったりすると導入できなかったりするので、 vim と使い分けて快適に過ごしていきたいと思います。( ・ㅂ・)و ̑̑