【问题标题】:Git push fails with public key when using SSH and specifying credentials使用 SSH 并指定凭据时,Git 推送因公钥而失败
【发布时间】:2016-11-03 05:02:38
【问题描述】:

我有一个奇怪的问题。我们的 Maven 发布插件失败,因为它无法将标签推送到 Git。以下失败:

git push ssh://PU0S:xL8q@git-eim.fg.com/u0r0-SS/workspace-proxy.git workspace-proxy-server-1.10.1
[ERROR] Permission denied (publickey).
[ERROR] fatal: Could not read from remote repository.
[ERROR] 
[ERROR] Please make sure you have the correct access rights
[ERROR] and the repository exists.

如果我远程进入机器并尝试使用表单的 URL 推送,我会收到相同的错误:

git push ssh://PU0S:xL8q@git-eim.fg.com/u0r0-SS/workspace-proxy.git

如果我只是使用定义的遥控器推送,它会成功:

git push origin master

以上内容让我确定机器上可以使用.ssh 键。为什么第一个表单会失败?

【问题讨论】:

  • 因此,如果您在此遥控器上签出 workspace-proxy-server-1.10.1,如果您的机器的公钥已添加到此 repo 的设置中,您将能够推送,如果 repo 确实如此不知道您将无法推送的公钥(/root/.ssh/id_rsa.pub 或 /youruser/.ssh/id_rsa.pub 内容需要复制到远程仓库以授予访问权限)
  • 我想知道我们会从这个问题中得到多少对 git-eim.fg.rbc.com 的请求;)
  • 所以我正在尝试更多的东西。知道为什么以下命令失败git clone ssh://git-eim.fg.com/u0r0-SS/workspace-proxy.git 但以下命令成功ssh://git@git-eim.fg.com/u0r0-SS/workspace-proxy.git? git@ 有什么特别之处?

标签: git maven ssh-keys


【解决方案1】:

知道为什么下面的命令会失败git clone ssh://git-eim.fg.com/u0r0-SS/workspace-proxy.git,但下面的命令会成功ssh://git@git-eim.fg.com/u0r0-SS/workspace-proxy.git吗?
git@有什么特别之处?

git@ 表示接收推送的用户是 git。然后由用于 ssh 的公钥管理身份验证。
这与 PU0S:xL8q 不同,PU0S:xL8q 是用户名/密码,仅在使用 https url 时需要。
对于 ssh url,您永远不会“按您的身份”(PU0S)推送,而是作为在服务器端管理 git 存储库的帐户。
这就是为什么,例如,你总是推送git@github.com

如果git push origin master 成功,则表示与名为“origin”的远程关联的 url 格式正确。
通常是ssh://git@git-eim.fg.com/u0r0-SS/workspace-proxy.git

检查git remote -v,或since git 2.7,检查git remote get-url origin

【讨论】:

  • 似乎git@ 不必存在于服务器中。例如,这个命令对我有用:git clone foo@git-eim.fg.com/u0r0-SS/workspace-proxy.git。这让你感到惊讶吗?
  • @timmy 这取决于 git 服务器的性质(它是由 gitolite、gitlab 还是其他管理的?)。但是克隆可以适用于任何帐户,因为您提供了 repo 的完整绝对路径,绕过了 git 托管服务(如 gitolite 或 gitlab)可能对其特殊帐户 git 实施的任何控制。
  • @timmy 简而言之,如果你有一个 repo 的完整绝对路径,单独的 git 将无法控制身份验证或授权,正如我在 stackoverflow.com/a/5685757/6309 中解释的那样
  • @timmy 如果/u0r0-SS/workspace-proxy.git 是由bar 创建的,尝试使用foo@git-eim.fg.com/u0r0-SS/workspace-proxy.git 推送应该会失败,因为foo 没有对bar 文件夹的写入权限。
【解决方案2】:

git 在你的 .ssh 文件夹下的某个位置寻找 ssh。

在配置文件中设置密钥,你应该可以克隆它。

打开一个终端窗口。 编辑~/.ssh/config 文件。
如果您没有配置文件,请创建一个。 为每个身份组合添加别名,例如:

Host workid
HostName github.com 
IdentityFile ~/.ssh/workid

【讨论】:

  • 所以我正在尝试更多的东西。知道为什么以下命令失败git clone ssh://git-eim.fg.com/u0r0-SS/workspace-proxy.git 但以下命令成功ssh://git@git-eim.fg.com/u0r0-SS/workspace-proxy.git? git@ 有什么特别之处?
【解决方案3】:

以下线索有助于诊断问题。

首先,让我们在不指定用户的情况下尝试 ssh -vT。注意会话假设用户是登录的账号,有特殊字符('SE121947+PVHF0ONE_SS')!

 $ ssh -vT git-eim.fg.com
OpenSSH_7.1p2, OpenSSL 1.0.2g  1 Mar 2016
....
debug1: Authenticating to git-eim.fg.com:22 as'SE121947+PVHF0ONE_SS'
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /c/Users/PVHF0ONE_SS/.ssh/id_rsa
debug1: No more authentication methods to try.

Permission denied (publickey).

现在让我们尝试指定 git@git-eim.fg.com

$ ssh -vT git@git-eim.fg.com
OpenSSH_7.1p2, OpenSSL 1.0.2g  1 Mar 2016
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to git-eim.fg.com [10.238.35.34] port 22.
debug1: Connection established.
debug1: identity file /c/Users/PVHF0ONE_SS/.ssh/id_rsa type 1
...
debug1: kex: server->client chacha20-poly1305@openssh.com <implicit> none
Authenticated to git-eim.fg.com ([10.238.35.34]:22).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
Hi PU0R0SRVDEVOPS! You've successfully authenticated, but GitHub does not provide shell access.

奇怪的是git@ 可以替换为foo@ 并且身份验证有效!这几乎就像它只是一个占位符。所以修复是确保 pom.xml 中的 developerConnection 有一个 git@ 以便 git 能够进行身份验证。

【讨论】:

  • "奇怪的是git@ 可以替换为foo@ 并且身份验证有效!几乎就像它只是一个占位符。"不,它不是占位符。如果它与foo 一起使用,则意味着~foo/.ssh/authorized_keys 拥有您的ssh 公钥。我的回答一直建议使用git@
  • 我在 github.com 上试过这个:ssh -Tv crazy@github.com。它有效。相信我,我没有一个叫疯狂的用户。它确实在我的 ~/.ssh 文件夹中找到了密钥。你有 git@ 的文档吗?我找不到。
  • GitHub 不像任何普通的 ssh 服务器那样管理 ssh 密钥。它有自己的公钥管理系统。 @github 前面的用户无所谓。重要的是您的公钥已注册到您的 GitHub 帐户。
  • 我的答案仍然有效,对于私人服务器来说是正确的。
  • 私人托管的 GitHub 管理 ssh 密钥的方式与公共托管的 GitHub 不同?也许这就是这里的困惑。最初的问题是关于私有托管的 GitHub 实例。
猜你喜欢
  • 2020-08-30
  • 1970-01-01
  • 2019-08-16
  • 2011-11-27
  • 2018-08-29
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多