先日書いたgitコマンドでMissing or invalid credentials. Error: connect ECONNREFUSED…が出たときの解決法の改訂版みたいなものです。
ここに記載する内容は非公式のため、実際にやる場合は自己責任でお願いいたします。
概要
VSCodeのRemoteSSHを使用していると、gitが使えなくなるという現象があります(原因不明)。
この現象が発生した場合の解決法を備忘録として記載します。
現象
-
VSCodeのGUIでPull、Push等を行おうとすると、ポップアップで以下のエラーが表示される
err: fatal: could not read Username for 'https://***.com': No such device or address
-
コマンドのログを表示させると
Missing or invalid credentials.
のログが出ている
解決法
以下の手順で解決します。
- コマンド実行
$ rm ~/.vscode-server/.cli* $ rm ~/.vscode-server/code-* $ rm -r ~/.vscode-server/cli $ rm -r ~/.vscode-server/data
- リロード
VSCode上でCtrl
+Shift
+P
からDeveloper: Reload Window
を選択して再読み込みを行う
調査
環境
- EC2(AmazonLinux2023)に対してVSCodeの機能拡張(RemoteSSH)で接続
- gitの使用方法
- git拡張のGUI
- ターミナルからのコマンド実行
再現手順
- GUIからPULL/PUSHを試みる
事象
- VSCodeのGUIでPull、Push等を行おうとすると、ポップアップで以下のエラーが表示される
- コマンドのログを表示させると
Missing or invalid credentials.
のログが出ている - ターミナルからのgitコマンドも効かない
- 環境変数
GIT_ASKPASS
をクリアするとターミナルからはgitコマンドが通るようになる - GUIからのPULL/PUSH等は依然エラーになる
原因
色々調べた結果、VSCodeのRemoteSSHを使うと作成される.vscode-serverという仮想環境が問題という結論に至りました。
この仮想環境の状態がおかしくなると問題が発生すると思うのですが、実際どういった条件で仮想環境がおかしくなるのかまでは不明です。
原因詳細
※推測が多分に含まれます。
VSCodeはRemoteSSHを使った際、勝手に 接続先に.vscode-serverという仮想環境(ディレクトリ)を作成するようです。
正常時の動作
gitコマンドを実行した際に利用される環境変数GIT_ASKPASS
には.vscode-server内のファイルが設定されていますので、正常時はGUIとターミナルは共に以下のような経路で実行されると推測されます。
問題発生時の動作
問題発生時は共にエラーになりますので、.vscode-serverの中の何かがおかしくなった可能性が高いです。
対策としてGIT_ASKPASSを空にした時の動作
ここでGIT_ASKPASSを空にすると、gitコマンドは.vscode-serverを介さなくなるため、ターミナルからの実行は成功するようになります。
GIT_ASKPASSを空にした状態でSettingsからGIT_ASKPASSの上書きを禁止にすると、GUIからのPULL/PUSH等は完全にできなくなります。(おそらくGUIからの実行は.vscode-serverを介することでうまくいくようになっている)
対策
.vscode-server内の何かが悪いので、クリアします。
$ ls -la ~/.vscode-server/
total 17368
drwxrwxr-x. 5 ec2-user ec2-user 157 Jan 30 05:26 .
drwx------. 14 ec2-user ec2-user 16384 Jan 30 05:27 ..
-rw-------. 1 ec2-user ec2-user 418 Jan 30 05:26 .cli.cd4ee3b1c348a13bafd8f9ad8060705f6d4b9cba.log
drwxrwxr-x. 3 ec2-user ec2-user 21 Jan 30 05:20 cli
-rwxr-xr-x. 1 ec2-user ec2-user 17745392 Jan 16 00:26 code-cd4ee3b1c348a13bafd8f9ad8060705f6d4b9cba
drwx------. 6 ec2-user ec2-user 88 Jan 30 05:20 data
drwx------. 15 ec2-user ec2-user 16384 Jan 29 07:04 extensions
.vscode-serverの中身を見ると、諸々のファイル群が存在します。
extensionsはRemoteSSHの環境にインストールした拡張機能なので、このディレクトリ以外を削除します。
$ rm ~/.vscode-server/.cli*
$ rm ~/.vscode-server/code-*
$ rm -r ~/.vscode-server/cli
$ rm -r ~/.vscode-server/data
VSCode上でCtrl
+Shift
+P
からDeveloper: Reload Window
を選択して再読み込みを行えば完了です。