使用 go get 或 go mod download 在私人儲存庫遇到 fatal: could not read Username for ‘https://github.com’: terminal prompts disabled

今天在下載某個專案使用 go get 裡面有用到私人儲存庫,系統竟然出現了 “fatal: could not read Username for ‘https://github.com’: terminal prompts disabled”

問題原因

其實會出現這個錯誤訊息的原因是它想要使用 HTTPS 的協定來下載儲存庫,不過因為 “GIT_TERMINAL_PROMPT” 預設是 false 因此不會跳出使窗請使用者輸入帳號密碼,預設會是 false 的原因是因為直接在 SHELL 輸入帳密可能會造成使用者帳密洩漏,因此這邊不太建議把 GIT_TERMINAL_PROMPT” 改成 true 的解決方法。

PS: 這邊因為私人儲存庫的位置不能公開所以使用 “https://github.com” 作為例子

那遇到這個問題應該怎麼解決呢?

在解決之前我們可以先檢查一下 SSH 與 Git 伺服器連線是否正常

$ ssh -A [email protected]
PTY allocation request failed on channel 0
Hi clarencetw! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

如果正常我們可以使用以下指令

git config --global url."[email protected]:".insteadOf "https://github.com/"

就可以解決問題了

此指令是跟系統說明所有 HTTPS 協定的 “https://github.com/” 都改成使用 SSH 協定的 “[email protected]:”

下完指令我們可以看到它會在 “.gitconfig” 新增一個設定

$ cat ~/.gitconfig
[url "[email protected]:"]
	insteadOf = https://github.com/

參考資料