Help us understand the problem. What is going on with this article?

VS Code Remote Development SSHセットアップ中にハマったこと

試した環境

  • クライアント
    • Windows 10 Pro: ver. 1903
    • Visual Studio Code:
      • Version: 1.38.1 (system setup)
      • Commit: b37e54c98e1a74ba89e03073e5a3761284e3ffb0
      • Date: 2019-09-11T13:35:15.005Z
      • Electron: 4.2.10
      • Chrome: 69.0.3497.128
      • Node.js: 10.11.0
      • V8: 6.9.427.31-electron.0
      • OS: Windows_NT x64 10.0.18362
    • Visual Studio Code Remote - SSH: ver. 0.46.0
    • ssh -V: OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019
      • ※Windows 10標準のOpenSSHではなく、MSYS2のOpenSSHを使用しています。
  • サーバー
    • Debian GNU/Linux: ver. 9.11
    • ssh -V: OpenSSH_7.4p1 Debian-10+deb9u7, OpenSSL 1.0.2s 28 May 2019

前提

クライアントからサーバーに、下記のコマンドでログインできること

ハマったところ1: remote.SSH.configFileが設定されてなければ読んでくれない?

初期設定時に「Select SSH configuration file」などと聞かれたので、従来から使っていたC:\Users\<クライアントのユーザー名>\.ssh\configを指定すると、指定したファイルが開かれたので、

Host <サーバーのホスト名>
    HostName <サーバーのホスト名>
    User <サーバーで使用するユーザー名>
    IdentityFile C:\Users\<クライアントのユーザー名>\.ssh\id_rsa

などと書いて「TARGETS (SSH)」に表示された<サーバーのホスト名>をダブルクリックすると、別ウィンドウで接続先のサーバー向けのVS Codeが起動... したんですが、すぐに「Could not establish connection to "<サーバーのホスト名>".」というエラーが出てしまいました。

Could not establish connection

ひとまず❎を押してウィンドウ下部にある「OUTPUT」に書いてある、ログっぽい文字列を確認したところ

[05:28:19.182] > <クライアントのユーザー名>@<サーバーのホスト名>: Permission denied (publickey,gssapi-keyex,gssapi-with-m
> ic)

と表示されていました。

ssh_configUser <サーバーで使用するユーザー名>と指定しているにもかかわらず、それが使用されず、代わりにデフォルトの値として<クライアントのユーザー名>が使われてしまっているみたいです。

どうしたものかとVS Code Remote Development SSHの設定項目を確認したところ、「Remote.SSH: Config File」なる設定項目(Setting ID: remote.SSH.configFile)が。

こちらに C:\Users\<クライアントのユーザー名>\.ssh\configを書いて再度接続すると、無事接続詞に行ったのですが、今度は別のエラーになりました。

ハマったところ2: 「Could not fetch remote environment」

今度は接続はできたのですが、「Could not fetch remote environment」とか「Failed to connect to the remote extension host server (Error: Time limit reached)」なるエラーが。

Could not fetch remote environment

VS Codeのウィンドウを見る限りそれ以上手がかりはなかったので、ログを漁ってみました。

するとC:\Users\<クライアントのユーザー名>\AppData\Roaming\Code\logsなるディレクトリーに、VS Codeを起動した時刻ごとにディレクトリーが1つ作られていました。

保存されるパスは起動した時刻などによって変わるようですが、私の場合C:\Users\<クライアントのユーザー名>\AppData\Roaming\Code\logs\20190914T141942\exthost4\output_logging_20190914T155257\1-Remote - SSH.logというファイルに、エラーの原因とおぼしきメッセージが書かれていました。

... 省略 ..
[06:52:59.242] [Forwarding server 57546] Got connection 1
[06:52:59.242] [Forwarding server 57546] Got connection 2
[06:52:59.252] > channel 3: open failed: administratively prohibited: open failed
[06:52:59.252] >
[06:52:59.253] Failed to set up socket for dynamic port forward to remote port 41075: Socket closed. Is the remote port correct?
... 省略 ..

このうち、administratively prohibited: open failedvscode-remote-releaseのissueを探してみると、下記のissueが見つかりました。

Channel 4: open failed: connect failed: Connection refused · Issue #773 · microsoft/vscode-remote-release

ドンピシャ🎯ですね(他にもよく似たissueが報告されています。原因もそれぞれバラバラかも知れません)。

長々とスクロールしてこちらのコメントに書いてあったStackExchangeの回答曰く、sshd_configを書き換えろ、とのこと。

そこで/etc/sshd_configを編集してAllowTcpForwardingPermitOpenという設定項目を次のように書き換えました。

AllowTcpForwarding yes
PermitOpen any

書き換えて保存したらsshdの再起動をお忘れなく:

$ sudo systemctl restart sshd

再度接続したところ、無事利用できました。🎉

これから詳しく使ってみます💪

なんでもLanguage Serverもサーバー側にインストールされたものが使われるそうなので、クライアントが非力なマシンでも快適に編集できそうでいいですね!

本文で言及のなかった参考ページ

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away