【问题标题】:How to git pull from public repo via ssh without a key?如何在没有密钥的情况下通过 ssh 从公共仓库 git pull?
【发布时间】:2016-11-05 22:01:15
【问题描述】:

我有一个公开回购,https://github.com/rlpowell/config。我曾经能够在没有任何 ssh 密钥(即来自 cron)的情况下运行 git pull,并且使用 git@github.com:rlpowell/config.git URL(即 SSH URL)可以正常工作。这不再有效,我不知道为什么,但它确实适用于我的两个朋友。

我希望能够在没有 ssh 密钥的情况下 git pull 一个公共 repo,或者至少了解为什么它对我不起作用而对其他人起作用。

这是一个朋友在尝试我的测试用例:

$ git clone git@github.com:rlpowell/config.git  ; cd config ; (unset SSH_AUTH_SOCK ; ssh-add -l ; git pull )
Cloning into 'config'...
Warning: Permanently added the RSA host key for IP address '192.30.253.113' to the list of known hosts.
remote: Counting objects: 1061, done.
remote: Total 1061 (delta 0), reused 0 (delta 0), pack-reused 1061
Receiving objects: 100% (1061/1061), 544.42 KiB | 495.00 KiB/s, done.
Resolving deltas: 100% (632/632), done.
Checking connectivity... done.
Could not open a connection to your authentication agent.
Already up-to-date.

我也在做同样的事情:

$ git clone git@github.com:rlpowell/config.git  ; cd config ; (unset SSH_AUTH_SOCK ; ssh-add -l ; git pull )
Cloning into 'config'...
remote: Counting objects: 1061, done.
remote: Total 1061 (delta 0), reused 0 (delta 0), pack-reused 1061
Receiving objects: 100% (1061/1061), 544.42 KiB | 0 bytes/s, done.
Resolving deltas: 100% (632/632), done.
Checking connectivity... done.
Could not open a connection to your authentication agent.
Enter passphrase for key '/home/rlpowell/.ssh/id_rsa':
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

(我在 ssh 密钥密码提示符处按回车键)。

在 repo 中,.git/config 是:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@github.com:rlpowell/config.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

而 git config -l 是:

$ git config -l
user.email=rlpowell@digitalkingdom.org
user.name=Robin Lee Powell
push.default=matching
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=git@github.com:rlpowell/config.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

git 版本是 2.5.5

strace 说实际运行 ssh 的东西是

ssh git@github.com git-upload-pack 'rlpowell/config.git'

【问题讨论】:

  • 一种可能性是,由于某种原因,您在 GitHub 中的 SSH 密钥与您在本地拥有的密钥不同步。关注these instructions 在 GitHub 中更新您的密钥。
  • 我认为您认为可以在没有密钥的情况下进行克隆/拉取的假设是错误的(请参阅docs)。看看你朋友得到的输出:... Could not open a connection to your authentication agent. ...;这证明在这种情况下使用了 SSH 密钥。您的朋友可能只是在他们的密钥上没有密码。如果您不想进行身份验证,请考虑使用 HTTPS 协议。
  • 我们检查了密码短语。我可以 git clone 没有钥匙,但不能拉。我的 2 个朋友可以克隆和拉取。我的一个朋友既不能克隆也不能拉动。有更深层次的事情发生。
  • 如果我理解正确,SSH 总是执行身份验证,因此需要您的密钥。另外尝试临时重命名~/.ssh 目录或使用不同的用户帐户以确保没有任何干扰。
  • 您可以尝试使用之前设置的GIT_TRACE=2 进行相同的两个会话吗? (git-scm.com/book/en/v2/…)

标签: git github


【解决方案1】:

我只是在没有密钥的情况下尝试过,我确认它无法工作(没有 SSH 密钥):

$ git clone git@github.com:rlpowell/config.git
Cloning into 'config'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

这是因为 GitHub 不会授权通过 SSH(而不是 https)进行匿名访问,因为其他 git 存储库服务器决定这样做(like Gogitsgo-gitea

GitHubdoes mention:

SSH URL 可通过安全协议 SSH 提供对 Git 存储库的访问。
要使用这些 URL,您必须在您的计算机上generate an SSH keypair 并将公钥添加到您的 GitHub 帐户。

(强调必须

Why? (asked in 2015)。虽然 sshd can be configured to allow anonymous access,但没有任何公共网站会考虑设置此设置:它存在太大的安全风险。

需要在没有特定密钥的情况下工作

如果需要匿名访问,可以使用:

  • https 网址
  • 一个 git URL:git://github.com/<user>/<repo>,虽然它使用端口 9418,这在企业环境中经常被阻止。

【讨论】:

    【解决方案2】:

    尝试先运行这个命令:

    ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no github.com
    

    然后再次git pull

    【讨论】:

    • $ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no github.com Permission denied (publickey).
    【解决方案3】:

    这是一个公开的 GitHub 存储库,您只想从中提取,因此您可以使用 HTTPS URL:

    https://github.com/rlpowell/config.git
    

    【讨论】:

      【解决方案4】:

      问题似乎出在 ssh 密钥上,至少响应是这样的:

      Enter passphrase for key '/home/rlpowell/.ssh/id_rsa':
      Permission denied (publickey).
      

      所以你需要将你的公钥添加到 github

      Adding a new SSH key to your GitHub account

      你也可以运行:

      ssh -T git@github.com
      

      检查与 github 的 ssh 连接

      【讨论】:

      • 是的,我知道 ssh 的工作原理以及 ssh 密钥如何与 github 交互;关键是您不需要 ssh 密钥来克隆或提取公共存储库,除非我这样做。你试过我给的测试代码了吗?
      【解决方案5】:

      对于公共回购,您不需要任何密码。您可以使用他们的 https 链接直接克隆:

      例如git clone https://github.com/rlpowell/config.git

      【讨论】:

        【解决方案6】:

        我认为你不能使用 SSH 来做到这一点。这是一个很好的解释:

        GitHub protocol comparison

        如果您想在没有任何密钥的情况下克隆和拉取内容,请使用 HTTP(S)。

        所以

        git clone http://github.com/rlpowell/config.git
        Klone nach 'config' ...
        warning: Leite nach https://github.com/rlpowell/config.git/ um
        remote: Counting objects: 1234, done.
        remote: Total 1234 (delta 0), reused 0 (delta 0), pack-reused 1234
        Empfange Objekte: 100% (1234/1234), 2.01 MiB | 1.07 MiB/s, Fertig.
        Löse Unterschiede auf: 100% (758/758), Fertig.
        

        “.git/config”将如下所示:

        [core]
            repositoryformatversion = 0
            filemode = true
            bare = false
            logallrefupdates = true
        [remote "origin"]
            url = http://github.com/rlpowell/config.git
            fetch = +refs/heads/*:refs/remotes/origin/*
        [branch "master"]
            remote = origin
            merge = refs/heads/master
        

        如果您已经克隆或使用git config,您可以稍后更改该文件

        通过这些设置,您可以随时git pull

        为什么使用网址git@github.com:rlpowell/config.git不起作用是由于以下原因:

        git@github.com:rlpowell 条目将强制您使用 SSH 进行身份验证。如果您想要 SSH 身份验证,Github 要求您使用密钥对。

        如果您想拥有一个自动 cronjob 用户并仍然使用 SSH,请为该用户创建一个密钥对并将公共密钥对上传到 gitlab。

        但如果你只想克隆和拉取,HTTPS 就绰绰有余了。顺便说一句,也可以通过 HTTPS 进行身份验证。如果您尝试推送更改,Github 会询问您的用户名和密码。如果您使用的是 cronjobs,当然不建议这样做。

        【讨论】:

          【解决方案7】:

          您的证书有问题。 简单的解决方案就是创建一个新的并替换旧的。

          这个问题可能是由几个问题引起的,例如:错误的主机文件条目、调用的 ssh 证书等等。

          所以最好的办法是创建一个新证书并对其进行测试。

          只需按照这些步骤,您将立即设置您的 ssh 密钥:

          • 生成新的 ssh 密钥(如果您已有密钥,则跳过此步骤)
            ssh-keygen -t rsa -C "your@email"

          • home/.ssh 目录(或Windows 下的Users/<your user>.ssh)中设置好密钥后,打开它并复制内容


          如何给github账号添加sh key?

          • 登录github账号
          • 点击右上角的牧场主(设置)
          • 点击SSH keys
          • 点击Add ssh key
          • 粘贴您的密钥并保存

          你们都准备好了:-)

          【讨论】:

          • 再次强调,应该可以在 没有 任何 ssh 密钥的情况下进行拉取。我以前做过,clone 可以在没有 ssh 密钥的情况下工作,而我的朋友可以在没有任何可用 ssh 密钥的情况下进行操作(它甚至不询问他们的主密钥密码)。
          • 好的。谢谢你的澄清
          【解决方案8】:

          无法在没有身份验证的情况下连接到 SSH 服务器。

          因此,不可能在没有注册 SSH 密钥的情况下克隆或拉取 SSH。

          你有两个选择:

          • 以拥有与 GitHub 帐户关联的 SSH 密钥的用户身份运行 cron 作业(如果需要,您可以使用配置文件指向特定的密钥文件)。
          • 使用 HTTPS。

          【讨论】:

            猜你喜欢
            • 2011-07-13
            • 1970-01-01
            • 2017-02-08
            • 2019-07-07
            • 1970-01-01
            • 2011-09-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多