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

自分のブログ( https://saino.me/2019/08/29/post-1151/ ) からの転記です。

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

# VS Code Remote Development って何？

<img width="400" alt="スクリーンショット 2019-08-29 20.13.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19717/04d481a3-ef18-e83e-7861-8739174c06e9.png">

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

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

# 私が導入した構成

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

# 導入方法

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

[Visual Studio Codeに超絶便利な Remote Development を入れる](https://qiita.com/sugimount/items/a8469227a5bc6e8c92ce)
[Windows10 VisualStudioCodeでRemote Devlopment](https://qiita.com/numasoh/items/79e138d1a2146490a927)

Qiita 内の [RemoteDevelopment](https://qiita.com/search?q=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
    ProxyCommand ssh -W %h:%p jumpbox
```

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 っぽいですね。なんとなく。(接続の仕方は逆方向ですけど)

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

```bash:/home/username/.bashrcなど
export http_proxy=<Your proxy server ip and port>
export https_proxy=<Your proxy server ip and port>
```

または、 `vscode-server` のダウンロードには 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` と使い分けて快適に過ごしていきたいと思います。( ･ㅂ･)و ̑̑