0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCodeでRemoteSSHを使用しているときにgitが使えなくなった場合の解決法

Posted at

先日書いたgitコマンドでMissing or invalid credentials. Error: connect ECONNREFUSED…が出たときの解決法の改訂版みたいなものです。

ここに記載する内容は非公式のため、実際にやる場合は自己責任でお願いいたします。

概要

VSCodeのRemoteSSHを使用していると、gitが使えなくなるという現象があります(原因不明)。
この現象が発生した場合の解決法を備忘録として記載します。

現象

  1. VSCodeのGUIでPull、Push等を行おうとすると、ポップアップで以下のエラーが表示される
    image.png
    err: fatal: could not read Username for 'https://***.com': No such device or address

  2. コマンドのログを表示させるとMissing or invalid credentials.のログが出ている

解決法

以下の手順で解決します。

  1. コマンド実行
    $ rm ~/.vscode-server/.cli*
    $ rm ~/.vscode-server/code-*
    $ rm -r ~/.vscode-server/cli
    $ rm -r ~/.vscode-server/data
    
  2. リロード
    VSCode上でCtrl+Shift+PからDeveloper: Reload Windowを選択して再読み込みを行う

調査

環境

  • EC2(AmazonLinux2023)に対してVSCodeの機能拡張(RemoteSSH)で接続
  • gitの使用方法
    • git拡張のGUI
    • ターミナルからのコマンド実行

再現手順

  • GUIからPULL/PUSHを試みる

事象

  1. VSCodeのGUIでPull、Push等を行おうとすると、ポップアップで以下のエラーが表示される
  2. コマンドのログを表示させるとMissing or invalid credentials.のログが出ている
  3. ターミナルからのgitコマンドも効かない
  4. 環境変数GIT_ASKPASSをクリアするとターミナルからはgitコマンドが通るようになる
  5. GUIからのPULL/PUSH等は依然エラーになる
    image.png

原因

色々調べた結果、VSCodeのRemoteSSHを使うと作成される.vscode-serverという仮想環境が問題という結論に至りました。
この仮想環境の状態がおかしくなると問題が発生すると思うのですが、実際どういった条件で仮想環境がおかしくなるのかまでは不明です。

原因詳細

※推測が多分に含まれます。

VSCodeはRemoteSSHを使った際、勝手に 接続先に.vscode-serverという仮想環境(ディレクトリ)を作成するようです。

正常時の動作

gitコマンドを実行した際に利用される環境変数GIT_ASKPASSには.vscode-server内のファイルが設定されていますので、正常時はGUIとターミナルは共に以下のような経路で実行されると推測されます。
success.png

問題発生時の動作

問題発生時は共にエラーになりますので、.vscode-serverの中の何かがおかしくなった可能性が高いです。
failed.png

対策としてGIT_ASKPASSを空にした時の動作

ここでGIT_ASKPASSを空にすると、gitコマンドは.vscode-serverを介さなくなるため、ターミナルからの実行は成功するようになります。
askpass_empty.png

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を選択して再読み込みを行えば完了です。

参考

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?