LoginSignup
14
2

[VSCode / Remote-SSH] ターミナルからはSSH接続できるのに、VSCodeからのSSH接続で弾かれるときの対処

Last updated at Posted at 2023-06-12

1. 症状

数分前まで、VSCodeから何の問題もなくリモートサーバーへのアクセスができていた。
しかし、なぜか急にVSCodeからのSSH接続ができなくなった。

そこで、SSH接続の試行中や失敗後に、VSCodeの出力 (output) タブを確認したところ、以下のようなエラーを確認できた。

エラーの抜粋

[19:05:24.142] stderr> OpenSSH_9.0p1, LibreSSL 3.3.6
[19:05:24.673] stderr> debug1: Server host key: ssh-ed25519 SHA256:qhW0XwqcYGXLSUw5bYEv3mitD1lgz5s0sQ+sqmzZQ9E
[19:05:24.852] stderr> Authenticated to 10.2.1.227 (via proxy) using "publickey".
[19:05:24.853] stderr> bind [::1]:'<port_number>': Address already in use
[19:05:24.853] stderr> bind [127.0.0.1]:'<port_number>': Address already in use
[19:05:24.853] stderr> channel_setup_fwd_listener_tcpip: cannot listen to port: '<port_number>'

手がかりはこれだけ。

環境

項目
ローカルPC MacOS (M2)
リモートサーバー AWS EC2
リモートOS Ubuntu
VSCode version バージョン: 1.78.2 (Universal)

念のため私の環境を記載したものの、
おそらくMac以外(windowsなど)でも発生すると思われる。

2. 対処法

とりあえず先に結論だけ書きます!
以下の対処法で処理できました。

・ssh to the remote machine(s) and delete the ~/.vscode-server directory with rm -Rf ~/.vscode-server/

https://learn.microsoft.com/en-us/answers/questions/939587/fail-to-ssh-connect-to-ubuntu-vm-using-visual-stud

具体的な手順は以下の通り。

2-1. SSHアクセス時のHost名を確認

Host名は、PC上のconfigというファイルに書かれています。
これを確認します。

VSCodeからSSHアクセスできていたということは、貴方のPCにはおそらく、 ~/.ssh/config というファイルがあるはずです。
(ただし、もしかしたらconfigファイルが、他のフォルダ内にあるかもしれません。)

そのファイルに書かれているHost名が必要です。

configファイルの見方
例えば以下のような設定になっているのであれば、、、

~/.ssh/config
Host training_server # <------ この場合は、 training_server がHost名
    HostName 10.2.3.4
    User ubuntu
    IdentityFile /Users/<username>/.ssh/id_private_key

VSCodeからも確認できます。

VSCodeでHost名を確認する場合
スクリーンショット 2023-06-12 19.48.54.png
※VSCodeのここ👆に表示されているのがHost名ですよ。

2-2. ターミナルからSSHアクセス

次に、VSCodeは使わず、PCのターミナルから直接SSHアクセスします。
sshの後ろには、先ほど調べた Host名 を入力してください。

PCのターミナル
# 以下のようにsshアクセスします
$ ssh training_server

ターミナルからのSSHアクセスに成功した場合、プロンプトの表記が変わるはずです。

逆に、このSSHアクセスが失敗する場合は、問題の原因が本記事とは異なりますので、他の原因を調査した方が良いでしょう。

2-3. ~/.vscode-server/ の削除

アクセス先のリモートサーバー内では、~/.vscode-server/を削除します。

bash
$ rm -Rf ~/.vscode-server/

これで、元通りVSCodeからリモートサーバーへとSSHアクセスできるようになっているはずです!

3. 調査経過

参考までに、上記の結論にいたるまでに調べた情報も書いておきます( *¯ ꒳¯*)✨

3-1. エラーログ本体

全体ではないものの、ログを以下に載せておきます。
以下の内容が何度もリピートで流れ続けました。

[19:05:24.037] Log Level: 2
[19:05:24.044] SSH Resolver called for "ssh-remote+'<SSHアクセス先>'", attempt 1
[19:05:24.044] "remote.SSH.useLocalServer": true
[19:05:24.044] "remote.SSH.path": undefined
[19:05:24.044] "remote.SSH.configFile": undefined
[19:05:24.044] "remote.SSH.useFlock": true
[19:05:24.044] "remote.SSH.lockfilesInTmp": false
[19:05:24.044] "remote.SSH.localServerDownload": auto
[19:05:24.044] "remote.SSH.remoteServerListenOnSocket": false
[19:05:24.045] "remote.SSH.showLoginTerminal": false
[19:05:24.045] "remote.SSH.defaultExtensions": []
[19:05:24.045] "remote.SSH.loglevel": 2
[19:05:24.045] "remote.SSH.enableDynamicForwarding": true
[19:05:24.045] "remote.SSH.enableRemoteCommand": false
[19:05:24.045] "remote.SSH.serverPickPortsFromRange": {}
[19:05:24.045] "remote.SSH.serverInstallPath": {}
[19:05:24.049] VS Code version: 1.78.2
[19:05:24.049] Remote-SSH version: remote-ssh@0.102.0
[19:05:24.049] darwin arm64
[19:05:24.049] SSH Resolver called for host: '<SSHアクセス先>'
[19:05:24.049] Setting up SSH remote "'<SSHアクセス先>'"
[19:05:24.051] Acquiring local install lock: /var/folders/7r/d08538nj63ncgxpk9jwhpxsc0000gp/T/vscode-remote-ssh-da1eb267-install.lock
[19:05:24.051] Looking for existing server data file at /Users/'<username>'/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-ssh/vscode-ssh-host-da1eb267-b3e4e68a0bc097f0ae7907b217c1119af9e03435-0.102.0/data.json
[19:05:24.052] Using commit id "b3e4e68a0bc097f0ae7907b217c1119af9e03435" and quality "stable" for server
[19:05:24.053] Install and start server if needed
[19:05:24.055] PATH: /Users/'<username>'/.pyenv/shims:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/usr/local/mysql/bin
[19:05:24.055] Checking ssh with "ssh -V"
[19:05:24.063] > OpenSSH_9.0p1, LibreSSL 3.3.6

[19:05:24.066] askpass server listening on /var/folders/7r/d08538nj63ncgxpk9jwhpxsc0000gp/T/vscode-ssh-askpass-e9630d00534335dfa147c8c9cde013370ec260d6.sock
[19:05:24.066] Spawning local server with {"serverId":1,"ipcHandlePath":"/var/folders/7r/d08538nj63ncgxpk9jwhpxsc0000gp/T/vscode-ssh-askpass-7737e24c0e4bb81d177ef72f307ff3513945fcfa.sock","sshCommand":"ssh","sshArgs":["-v","-T","-D","50384","-o","ConnectTimeout=15","'<SSHアクセス先>'"],"serverDataFolderName":".vscode-server","dataFilePath":"/Users/'<username>'/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-ssh/vscode-ssh-host-da1eb267-b3e4e68a0bc097f0ae7907b217c1119af9e03435-0.102.0/data.json"}
[19:05:24.066] Local server env: {"SSH_AUTH_SOCK":"/private/tmp/com.apple.launchd.u6qA2youBr/Listeners","SHELL":"/bin/zsh","DISPLAY":"1","ELECTRON_RUN_AS_NODE":"1","SSH_ASKPASS":"/Users/'<username>'/.vscode/extensions/ms-vscode-remote.remote-ssh-0.102.0/out/local-server/askpass.sh","VSCODE_SSH_ASKPASS_NODE":"/Users/'<username>'/Downloads/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin)","VSCODE_SSH_ASKPASS_EXTRA_ARGS":"--ms-enable-electron-run-as-node","VSCODE_SSH_ASKPASS_MAIN":"/Users/'<username>'/.vscode/extensions/ms-vscode-remote.remote-ssh-0.102.0/out/askpass-main.js","VSCODE_SSH_ASKPASS_HANDLE":"/var/folders/7r/d08538nj63ncgxpk9jwhpxsc0000gp/T/vscode-ssh-askpass-e9630d00534335dfa147c8c9cde013370ec260d6.sock"}
[19:05:24.067] Spawned 7683
[19:05:24.137] > local-server-1> Running ssh connection command: "-v -T -D 50384 -o ConnectTimeout=15 '<SSHアクセス先>'"
[19:05:24.138] > local-server-1> Spawned ssh, pid=7689
[19:05:24.142] stderr> OpenSSH_9.0p1, LibreSSL 3.3.6
[19:05:24.673] stderr> debug1: Server host key: ssh-ed25519 SHA256:qhW0XwqcYGXLSUw5bYEv3mitD1lgz5s0sQ+sqmzZQ9E
[19:05:24.852] stderr> Authenticated to 10.2.1.227 (via proxy) using "publickey".
[19:05:24.853] stderr> bind [::1]:'<port_number>': Address already in use
[19:05:24.853] stderr> bind [127.0.0.1]:'<port_number>': Address already in use
[19:05:24.853] stderr> channel_setup_fwd_listener_tcpip: cannot listen to port: '<port_number>'
[19:05:25.035] > Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.19.0-1022-aws x86_64)
> 
>  * Documentation:  https://help.ubuntu.com
>  * Management:     https://landscape.canonical.com
>  * Support:        https://ubuntu.com/advantage
> 
>   System information as of Mon Jun 12 10:04:32 UTC 2023
> 
>   System load:  2.2568359375        Processes:                259
>   Usage of /:   80.7% of 968.99GB   Users logged in:          1
>   Memory usage: 43%                 IPv4 address for docker0: 172.17.0.1
>   Swap usage:   0%                  IPv4 address for eth0:    10.2.1.227
> 
>  * Ubuntu Pro delivers the most comprehensive open source security and
>    compliance features.
> 
>    https://ubuntu.com/aws/pro
> 
> 107 updates can be applied immediately.
> To see these additional updates run: apt list --upgradable
> 
> 
> *** System restart required ***
[19:05:25.092] > ready: 930fb5b872f4
[19:05:25.126] > Linux 5.19.0-1022-aws #23~22.04.1-Ubuntu SMP Fri Mar 17 15:38:24 UTC 2023
[19:05:25.127] Platform: linux
[19:05:25.151] > /bin/bash
[19:05:25.151] Shell: bash
[19:05:25.151] Creating bash subshell inside "bash"
[19:05:25.187] > bash version:  5.1.16(1)-release
[19:05:25.235] > 930fb5b872f4: running
[19:05:25.261] > Acquiring lock on /home/ubuntu/.vscode-server/bin/b3e4e68a0bc097f0ae7907b217c1119af9e03435/vscode-remote-lock.ubuntu.b3e4e68a0bc097f0ae7907b217c1119af9e03435
[19:05:25.292] > Installation already in progress...
> If you continue to see this message, you can try toggling the remote.SSH.useFlock setting
> 930fb5b872f4: start
> exitCode==24==
> listeningOn====
> osReleaseId==ubuntu==
> arch==x86_64==
> vscodeArch==x64==
> bitness==64==
> tmpDir==/run/user/1000==
> platform==linux==
> unpackResult====
> didLocalDownload==0==
> downloadTime====
> installTime====
> extInstallTime====
> serverStartTime====
> 930fb5b872f4: end
[19:05:25.292] Received install output: 
exitCode==24==
listeningOn====
osReleaseId==ubuntu==
arch==x86_64==
vscodeArch==x64==
bitness==64==
tmpDir==/run/user/1000==
platform==linux==
unpackResult====
didLocalDownload==0==
downloadTime====
installTime====
extInstallTime====
serverStartTime====

[19:05:25.292] Server installation process already in progress - waiting and retrying
[19:05:25.292] Terminating local server
[19:05:25.297] Local server exit: 15
[19:05:26.299] askpass server listening on /var/folders/7r/d08538nj63ncgxpk9jwhpxsc0000gp/T/vscode-ssh-askpass-af8043ee197a0e7fe637f9611c64063e0d87ca8b.sock
# ここで振り出しに戻り、以下エンドレス...

3-2. 調べたこと

これは私の場合ですが、上記の通りエラーログに、Address already in useと書いてありました。
なので念のため、そのポートが動いてないかも確認しました。

ローカルPCのターミナルで実施
# <port number>のところにsshアクセスするときに使用するport番号を入れてください
$ lsof -i:<port number>

# Example (利用するport番号が 22 の場合)
$ lsof -i:22

上記コマンドを打つと、もし22番ポートが利用中であれば、以下のような出力が表示されます。

bash
$ lsof -i:22
COMMAND   PID       USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
ssh     22069   username    6u  IPv6 0xe2ab4b26dcc553b5      0t0  TCP localhost:22 (LISTEN)
ssh     22069   username    7u  IPv4 0xe2ab4b1d453fbe1d      0t0  TCP localhost:22 (LISTEN)

でも、何も出なかったんですよね。。。
already in useって書いてあったのに。使われていない。
幽霊👻じゃん。。。と思いました。

そんな貴方は、私と同じ現象に出くわしている可能性がありますので、 2. 対処法 を試していただければと思います。

それでもダメでしたら、 5. 参考資料 に載せた記事が参考になるかもしれません。
他の対処法も書いてあったので、そちらも見ていただければと思います >_<


ちなみに、もしportが本当に使われていた場合は、そのサービスを kill して下さい。
killの方法については本記事の範囲からは外れるので、他の記事に任せます。

以下の記事はわかりやすいと思います。

4. 終わりに

なんか、原因はわからないんですけど、解決してしまった。何なんでしょうね( ˘·ω·˘ ).。oஇ
数年前も似たようなことは起きてました。

その際も、原因が全くわからず何時間も苦しんだ記憶があったので、記事化しておきました。
ChatGPTに収集されても構わないので、誰かの助けになれば幸いです(o*。_。)o

5. 参考資料

5-1. MicrosoftのQ&A

5-2. エラーメッセージ中にPermission deniedがある場合

同じ症状ではあるものの、エラーメッセージが異なり、 Permission denied が含まれている場合があるようです。その場合は次の記事が参考になるかもしれません。

14
2
2

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
14
2