«go get»和GitHub:突破“terminal prompts disabled”的障碍

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:当简单的go get变成一道难题

\n\n

您是否曾尝试执行go get github.com/您的账户/私有仓库,却只收到一条冰冷、不友好的消息?

\n\n
go get github.com/您的账户/私有仓库: \n  module github.com/您的账户/私有仓库: \n  git ls-remote -q origin in /tmp/...: exit status 128:\n    remote: Invalid username or password.\n    fatal: Authentication failed for 'https://github.com/您的账户/私有仓库.git'
\n\n

或者,更令人费解的是:

\n
go get github.com/您的账户/私有仓库: \n  terminal prompts disabled\n  Confirm the import path was entered correctly.\n  If this is a private repo, see https://golang.org/doc/faq#git_https
\n\n

熟悉的情况吗?如果是——您来对地方了。这个错误是使用GitHub私有仓库的Go开发人员典型的“绊脚石”。在Stack Overflow上,这个问题获得了数千次浏览,今天我们将一劳永逸地解决它。

\n\n

在本文中,我们不仅要解决问题——还要理解为什么会出现这个问题,并学会配置环境,使go get能够顺畅地处理私有仓库。开始吧!

\n\n

为什么Go拒绝处理私有仓库?

\n\n

要理解原因,需要深入了解Go的“引擎盖下”。当您执行go get时,Go工具链会执行以下操作:

\n\n
    \n
  1. 它尝试通过HTTPS克隆仓库(这是默认协议)。
  2. \n
  3. 如果仓库是私有的,Git会要求进行身份验证(用户名/密码)。
  4. \n
  5. 默认情况下,Go会禁用终端中的交互式提示——这就是所谓的“terminal prompts disabled”。
  6. \n
\n\n

为什么Go要这样做?很简单:在自动构建或CI/CD流水线中,交互式密码输入是不可能的。因此,Go宁愿“失败”并报错,也不愿挂起等待输入。

\n\n

关键点:“terminal prompts disabled”错误不是bug,而是一个特性。Go在告诉您:“我无法询问您的密码,请给我准备好的凭据。”我们的任务就是提供这些凭据。

\n\n

方法1:使用SSH(最可靠且正确的方法)

\n\n

这是推荐的方法。SSH密钥安全、方便,无需每次都输入密码。

\n\n

步骤1. 生成SSH密钥(如果没有)

\n

打开终端并执行:

\n
ssh-keygen -t ed25519 -C "您的邮箱@example.com"
\n

按Enter键将密钥保存到标准文件夹(~/.ssh/id_ed25519)。您可以添加密码短语——这可以提高安全性。

\n\n

步骤2. 将密钥添加到SSH代理

\n
eval "$(ssh-agent -s)"\nssh-add ~/.ssh/id_ed25519
\n\n

步骤3. 将公钥添加到GitHub

\n

复制~/.ssh/id_ed25519.pub的内容:

\n
cat ~/.ssh/id_ed25519.pub
\n

转到GitHub → Settings → SSH and GPG keys → New SSH key。粘贴密钥并保存。

\n\n

步骤4. 配置Git使用SSH

\n

现在最重要的一步:需要让Go使用SSH而不是HTTPS。为此,编辑~/.gitconfig文件:

\n
[url "git@github.com:"]\n    insteadOf = https://github.com/
\n

这个指令告诉Git:“当看到https://github.com/时——使用git@github.com:(SSH)”。

\n\n

步骤5. 再次尝试

\n
go get github.com/您的账户/私有仓库@latest
\n

如果一切配置正确——错误将消失。Go将使用SSH进行身份验证,而SSH代理将提供密钥。

\n\n

方法2:使用个人访问令牌(PAT)——适用于CI/CD和脚本

\n\n

SSH非常适合本地开发

博客

书籍推荐