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/
具体的な手順は以下の通り。
2-1. SSHアクセス時のHost名を確認
Host名
は、PC上のconfig
というファイルに書かれています。
これを確認します。
VSCodeからSSHアクセスできていたということは、貴方のPCにはおそらく、 ~/.ssh/config
というファイルがあるはずです。
(ただし、もしかしたらconfig
ファイルが、他のフォルダ内にあるかもしれません。)
そのファイルに書かれているHost名が必要です。
configファイルの見方
例えば以下のような設定になっているのであれば、、、
Host training_server # <------ この場合は、 training_server がHost名
HostName 10.2.3.4
User ubuntu
IdentityFile /Users/<username>/.ssh/id_private_key
VSCodeからも確認できます。
2-2. ターミナルからSSHアクセス
次に、VSCodeは使わず、PCのターミナルから直接SSHアクセスします。
ssh
の後ろには、先ほど調べた Host名
を入力してください。
# 以下のようにsshアクセスします
$ ssh training_server
ターミナルからのSSHアクセスに成功した場合、プロンプトの表記が変わるはずです。
逆に、このSSHアクセスが失敗する場合は、問題の原因が本記事とは異なりますので、他の原因を調査した方が良いでしょう。
2-3. ~/.vscode-server/ の削除
アクセス先のリモートサーバー内では、~/.vscode-server/
を削除します。
$ 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
と書いてありました。
なので念のため、そのポートが動いてないかも確認しました。
# <port number>のところにsshアクセスするときに使用するport番号を入れてください
$ lsof -i:<port number>
# Example (利用するport番号が 22 の場合)
$ lsof -i:22
上記コマンドを打つと、もし22番ポートが利用中であれば、以下のような出力が表示されます。
$ 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
が含まれている場合があるようです。その場合は次の記事が参考になるかもしれません。