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?

gitコマンドでMissing or invalid credentials. Error: connect ECONNREFUSED…が出たときの解決法

Last updated at Posted at 2025-01-28

概要

gitコマンドを実行したところ、Missing or invalid credentials. Error: connect ECONNREFUSED ...というエラーが出るようになってしまい、対処方法と原因の調査をしたので記載します。
対処法については先人の記事がありますので、そちらを参考にしてください。この記事では原因の深掘りをメインに書いていきます。

解決法

環境変数をクリアする

こちらにドンピシャな答えが載っていました。
以下のコマンドで解決。他にも方法はあるようですが、割愛します。

$ export GIT_ASKPASS=

GIT_ASKPASSを上書きしないようにする

以下の手順で設定を変更します。

  • VSCodeのSettingsでASKPASSを検索すると出てくるUse Integrated Ask Passのチェックを外す
    • {B99F7301-29C6-4884-B6B6-56B82D6C263D}.png
  • Ctrl+Shift+PDeveloper: Reload Windowを選択して再読み込みを行う
  • 念のためターミナルも新しいものを開く

この設定の結果、GUIでのremote側とやり取り(PULL等)ができなくなったので、GUIを使用している方はご注意ください。

個人的興味による調査

環境

AWS上のEC2(Linux)にWindowsPCからVSCodeのRemoteSSHで接続して操作を行っていました。

現象

gitコマンドの中でもリモートとやり取りが発生するコマンド(git pullやgit pushなど)を実行すると以下のエラーが出るようになりました。

Missing or invalid credentials.
Error: connect ECONNREFUSED /run/user/1000/vscode-git-xxxxxxxxx.sock
    at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1611:16) {
  errno: -111,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '/run/user/1000/vscode-git-xxxxxxxxx.sock'
}
Missing or invalid credentials.
Error: connect ECONNREFUSED /run/user/1000/vscode-git-xxxxxxxxx.sock
    at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1611:16) {
  errno: -111,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '/run/user/1000/vscode-git-xxxxxxxxx.sock'
}
remote: Unauthorized
fatal: Authentication failed for 'https://....'

追記 エラー内容は異なりますが、同じような現象だったのでこちらのエラーも載せておきます。

$ git pull origin main
Missing or invalid credentials.
Missing pipe
Missing or invalid credentials.
Missing pipe
remote: Unauthorized
fatal: Authentication failed for 'https://xxxx.git

解決方法からの逆算

export GIT_ASKPASS=で解決するということは、GIT_ASKPASSに何かおかしな値が入っているということです。
では、何が入っているのか?
問題が発生する状態で当該の環境変数に何が入っているか見てみます。

$ echo $GIT_ASKPASS
/home/ec2-user/.vscode-server/cli/servers/Stable-xxxxxxxxxxxxxxxxxxxxxxxxxxx/server/extensions/git/dist/askpass.sh

VSCodeでSSH接続した場合に作成されるディレクトリの中のシェルスクリプトを参照しているようです。

ファイルの中身を見てみます。

#!/bin/sh
VSCODE_GIT_ASKPASS_PIPE=`mktemp`
ELECTRON_RUN_AS_NODE="1" VSCODE_GIT_ASKPASS_PIPE="$VSCODE_GIT_ASKPASS_PIPE" VSCODE_GIT_ASKPASS_TYPE="https" "$VSCODE_GIT_ASKPASS_NODE" "$VSCODE_GIT_ASKPASS_MAIN" $VSCODE_GIT_ASKPASS_EXTRA_ARGS $*
cat $VSCODE_GIT_ASKPASS_PIPE
rm $VSCODE_GIT_ASKPASS_PIPE

何やっているかわからないので一つ一つ見ていきます。

  • VSCODE_GIT_ASKPASS_PIPE=`mktemp`
    • mktempはユニークなファイルを作るコマンド(https://nxmnpg.lemoda.net/ja/1/mktemp)
    • ここはmktempの実行結果(mktempで作られたファイル名)をセットしている
  • ELECTRON_RUN_AS_NODE="1"
  • VSCODE_GIT_ASKPASS_PIPE="$VSCODE_GIT_ASKPASS_PIPE"
    • よくわからない
  • VSCODE_GIT_ASKPASS_TYPE="https"
    • httpsでの処理を行う
  • `"$VSCODE_GIT_ASKPASS_NODE"
    • /home/ec2-user/.vscode-server/cli/servers/Stable-xxxxxxxxxxxxxxxxxxxxxxxxxxx/server/node
  • "$VSCODE_GIT_ASKPASS_MAIN"
    • /home/ec2-user/.vscode-server/cli/servers/Stable-xxxxxxxxxxxxxxxxxxxxxxxxxxx/server/extensions/git/dist/askpass-main.js
  • $VSCODE_GIT_ASKPASS_EXTRA_ARGS
    • 何もセットされていない

詳細は不明ですが、Node.jsを使ってaskpass-main.jsを実行した結果をmktempで作成したファイルに流し込んでどこかに渡している感じでしょうか。
では、askpass-main.ts出は何をやっているのか。実際のコードを見てみます。

fatalのところに見慣れた文字列があります。
もう少し進めてみると、httpsを指定した場合の処理部分があります。
引数を引っ張ってきているのですが、この辺でこけているっぽいので引数が悪さしているのかな。という感じです。実際どんな引数が渡されているかまでは確認できませんでした。

というわけで、この辺りに原因があるんだろうなーということがわかりましたので調査を終了します。

GIT_ASKPASSが上書きされる原因と対策

この記事を書いている途中で毎回GIT_ASKPASSが上書きされるという事象に当たりまして、根本的に解決できないか調べることにしました。

原因

GIT_ASKPASSという環境変数自体はGitの機能として設定ファイルのcore.askpassの値をセットするようです。
ただ、私の環境ではcore.askpassは設定されていません。

諸々調べていると、この設定はVSCodeの組み込みのgit拡張がよかれと思って入れているんだとか…。

調査

VSCodeが設定しているのならば、Settingsに定義があるのでは?と思い、Settingsを開いてGIT_ASKPASSを検索してみると、それらしき項目がありました。

{7DFD6EC1-A8B2-43CC-9619-8E02A3AE7171}.png

Googleさんで翻訳してみると、Git: 統合されたAskパスを使用する 統合バージョンを使用するために GIT_ASKPASS を上書きするかどうかを制御します。となります。
これぞまさしく求めていた設定!ということでチェックを外してVSCodeを再起動してみます。

再起動後にecho $GIT_ASKPASSで設定状態を確認……セットされていました泣
※今考えると、再起動後のカレントディレクトリが再起動前のものと一緒だったので、キャッシュが効いていたのかもしれません。

何回かやっても上書きされるので、PC再起動してVSCodeを立ち上げて再確認……無事セットされなくなりました!

最終的な解決方法

VSCodeを使っていて突如 Missing or invalid credentials.・・・・が出るようになりましたが、以下の手順で解決しました。

  1. 環境変数(GIT_ASKPASS)のクリア
  2. VSCodeのSettingでGit: Use Integrated Ask Passのチェックを外す
  3. Ctrl+Shift+PDeveloper: Reload Windowを選択して再読み込みを行う
  4. 念のためターミナルも新しいものを開く

参考サイト

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?