saino.me (kaishuu0123)

都内でひっそりと生きる IT エンジニアの個人ブログです

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 で編集できるようにする機能です。便利ですね。

私が導入した構成

導入方法

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

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 と使い分けて快適に過ごしていきたいと思います。( ・ㅂ・)و ̑̑