【问题标题】:The authenticity of host 'github.com (192.30.252.128)' can't be established无法确定主机'github.com(192.30.252.128)'的真实性
【发布时间】:2013-09-13 15:27:00
【问题描述】:

我正在尝试使用

sudo npm install

为用 nodejs 编写的应用程序安装我的所有依赖项。我的操作系统是 Ubuntu 13.04

但是,我不断收到此警告:

The authenticity of host 'github.com (192.30.252.131)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:1d:52:13:1a:21:2d:bz:1d:66:a8.
Are you sure you want to continue connecting (yes/no)?

以前有人遇到过这个警告吗?是否可以在本地验证和存储指纹?所以下次输入 sudo npm install 就不需要再认证了。

现在,我无法输入任何内容,甚至无法输入“是”。我的终端卡住了,我必须按 Ctrl+C 才能终止。

【问题讨论】:

  • @Stéphane Gourichon 的答案是真正正确的答案,Matt Pavelle 对可能导致您首先看到问题的原因给出了很好的答案。

标签: node.js git ubuntu github ssh-keys


【解决方案1】:

前面有危险,除非你真的不关心在本地帐户上与 github 的安全通信

Ssh 正确地抱怨他们无法确保您确实通过安全通道连接到 github 的服务器。这可能就是 github 推荐 https 访问的原因,因为它的公钥基础设施开箱即用。

现在,您可以让它工作,但请注意,它涉及缓存公钥指纹,如果操作不正确,则会为攻击者提供永久性的中间人攻击。

如何安全前行?

选项 1 是使用 https url 而不是 ssh。

选项 2 是有 ssh 访问工作。

好的,告诉我选项 2

请输入ssh -T git@github.com,但不要只输入“是”。检查显示的哈希值是否与https://help.github.com/articles/what-are-github-s-ssh-key-fingerprints/ 中显示的哈希值之一匹配(在您的问题中,它确实如此,并且看到,出于相同的公钥基础设施原因,该页面是通过 https 获取的)。

如果哈希匹配,那么连接确实是安全的,你可以对 ssh 的问题回答“是”。

好的,我检查并输入了yes,我怎么知道它有效?

Ssh 将显示如下内容:

警告:为 IP 地址永久添加了 RSA 主机密钥 '192.30.252.128' 到已知主机列表。

之后,您会看到类似

的消息

权限被拒绝(公钥)。

这很好,但表明您需要进一步配置,或者只是

您好您的登录名!您已成功通过身份验证,但 GitHub 没有 提供外壳访问。

这意味着一切正常,您可以重试第一次操作。

请注意,如果您重试相同的 ssh 命令,它应该不再询问问题。

【讨论】:

  • 如果您的权限被拒绝(公钥),请转到 github.com/settings/ssh 并在那里添加您的 ssh 密钥
  • @urig 我提到的页面(github.com/settings/ssh)有一个指向generate a GPG key and add it to your account的链接
  • @Surya 如果哈希不匹配,这意味着您正在与之通信的服务器发送了不同的密钥。如果没有明显的公开警告,Github 可能不会更改密钥。因此,该服务器是模拟 github 服务器的不同服务器。它可能是邪恶的攻击者和/或公司代理。如果这发生在我身上,我会拒绝密钥,中止连接并进行调查。您是否观察到了这一点,或者这是一个理论问题?
  • 我观察到了,但看起来它是我办公室配置的代理。所以我们通知了 IT 团队,现在一切正常。感谢您的澄清:D
  • 如果你总是得到Permission denied (publickey).,请使用ssh -T git@github.com而不是ssh github.com
【解决方案2】:

在命令提示符下运行 ssh -o StrictHostKeyChecking=no git@github.com 以将真实性添加到您的 known_hosts。那么下次就不会收到提示了。

【讨论】:

【解决方案3】:

您确定您没有意外以其他用户身份登录(当我 sudo -s / 以 root 身份登录并忘记我的 GitHub 帐户未链接到该用户时,就会发生这种情况)。

【讨论】:

  • 一些该死的 shell 脚本让我登录为 root 哈哈 - 谢谢,@matt-pavelle
【解决方案4】:

我来到这里是因为我遇到了这个错误并且不明白为什么。原来我的 npm 命令有错字:

npm install -P -E @angular/common @angular/compiler @angular/core @angular/forms 
@angular/platform-browser @angular/router @angular/animations@ angular/platform-browser-dynamic

注意行尾如何读取@angular/animations@ angular/platform-browser-dynamic

NPM 将最后一个“包”解释为 github 存储库,这就是错误的来源。

我知道这并没有实际上回答这个问题,但我提出来以防万一其他人遇到类似的错误。

【讨论】:

  • 你能澄清一下那条线到底出了什么问题吗?我怀疑我有类似的问题
  • @mgPePe @ 和 NPM 作用域名称之间有一个空格,这使得 NPM 将其解释为不是作用域而是 github 帐户名称。
  • 我明白了。我也有类似的问题!
【解决方案5】:

Github 刚刚更改了他们的 IP 地址基础设施。你可以在这里阅读更多细节https://github.com/blog/1606-ip-address-changes。另外,我以前从未见过这样的问题。您的 package.json 是否包含通过 ssh 克隆的 git 依赖项?

试试 echo 'yes' | sudo npm 安装。这可能会解决您的问题。如果没有,请尝试通过 HTTPS 进行克隆,或者将模块下载为 tarball,可以这样做 https://api.github.com/repos/username/reponame em>/压缩包

【讨论】:

    【解决方案6】:

    如果你有这种类型的问题

    The authenticity of host 'github.com (192.30.252.131)' can't be established.
    RSA key fingerprint is 16:27:ac:a5:76:28:1d:52:13:1a:21:2d:bz:1d:66:a8.
    Are you sure you want to continue connecting (yes/no)?
    

    别担心,请按照以下步骤操作:

    第一步:yes [press enter]

    然后你会得到:

    Please type 'yes', 'no' or the fingerprint:

    第二步:copy fingerprint and paste here [press enter ]

    【讨论】:

      【解决方案7】:

      我通过运行解决了我的问题

      ssh-keyscan github.com >> ~/.ssh/known_hosts
      

      在命令提示符下。此命令将为您的 known_hosts 添加真实性。

      【讨论】:

        【解决方案8】:

        我使用的是npm ci,但package-lock.json 文件中有很多git+ssh:// URL 会触发此错误消息。

        根据此处接受的答案,我使用了一个小的sed 脚本将所有ssh:// URL 替换为https:// URL:

        sed -i 's|git+ssh://git@github.com|https://github.com|' ./package-lock.json
        

        我希望这可以帮助一些处于类似情况的人。

        这是一个快速的解决方法。更持久的解决方案是修复 package.json 文件中的 URL,以构建改进的 package-lock.json 文件。

        【讨论】:

          【解决方案9】:

          运行ssh github.com 并输入yes,它应该会失败。然后再次运行您的命令。如果不尝试ssh github.com,因为他们有多个 IP,您可能需要所有这些。

          【讨论】:

          • 这是错误和危险的。请参阅下面@payne8 的评论。请参阅我的其他答案。
          • 同意@Stéphane Gourichon 的观点,盲目地这样做会很危险,因为它似乎否定了提示的目的。他的回答指向验证哈希的 URL:help.github.com/articles/what-are-github-s-ssh-key-fingerprints(取自他的回答,IMO 绝对应该是答案并赞成),尽管我承认我总是想知道是否有人可以欺骗 DNS 记录,他们能不能也欺骗验证页面。
          • @ibgib 谢谢。验证页面提供了明显更好的防止欺骗的保护(也就是说,除非用户忽略浏览器警报,这类似于在 ssh 密钥验证提示中盲目地键入“yes”)。验证页面通过 https 保护,所有正确执行 https 的浏览器都有一个受信任的根证书列表,旨在保证 github 服务器证书是真实的(有关详细信息,包括限制,请参阅Public key infrastructure)。它并不完美,但更难欺骗。
          猜你喜欢
          • 2022-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-22
          • 2021-06-18
          • 2019-08-28
          • 2021-02-13
          • 2011-04-09
          相关资源
          最近更新 更多