将提交推送到亚马逊 ec2 时权限被拒绝(公钥)

Posted

技术标签:

【中文标题】将提交推送到亚马逊 ec2 时权限被拒绝(公钥)【英文标题】:Permission denied (publickey) when pushing commit to amazon ec2 【发布时间】:2014-05-09 09:53:27 【问题描述】:

我知道这里有很多类似的问题(我在发布这个之前阅读了很多),但是这个不同,所以请多陪我一会儿。

几天前,我在亚马逊 ec2 上配置了我的远程 git 存储库。经过数小时的努力,我让它工作并能够在那里push 文件。我用它工作了一两天,没有任何问题地向它推送资源(我正确地看到了每个更新)。

今天,由于某种原因,我无法从本地计算机向其推送任何内容。

git push deploy 最终出现以下错误消息(我在尝试获取有关部署的信息时看到的同一条消息:git remote show deploy):

warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

它的第一部分(在权限被拒绝之前)我之前能够看到,但当时它仍然正确推送所有内容。

部署存在是因为我可以通过git remote -v 清楚地看到它:

deploy  ssh://ubuntu@X.X.X.X/home/ubuntu/repo (fetch)
deploy  ssh://ubuntu@X.X.X.X/home/ubuntu/repo (push)

我可以正确地 ssh 到我的服务器,我的私钥也有 0400 权限。在两台机器上我都有ubuntu 12.04 LTS

我认为我的公钥可能有问题,所以我继续使用私钥重新创建它:ssh-keygen -y -f key.pem > key.pub。基于其sha,它与我之前的公钥相同:sha1sum key_prev.pub = sha1sum key.pub

我仍然去服务器并为授权密钥添加了一个新密钥。

仍然没有变化。我不能推任何东西。谁能告诉我这里有什么问题以及为什么会发生?我需要对本地的.ssh/known_hosts 做任何事情吗?

在其中一个答案中我还发现了以下内容:

请注意,重启实例后,dns 名称发生了变化。 我为此跌倒了好几次。密钥文件仍然有效,但 “服务器名称”已更改。

我实际上重新启动了我的机器,所以我认为这是高度相关的。问题是我不明白我现在应该改变什么。

看完VonC的回答。

我无法通过ssh ubuntu@X.X.X.X ssh 到服务器(我得到了Permission denied (publickey).),但我可以使用ssh myAlias 执行此操作,其中myAlias 在~/.ssh/config 中定义

Host            myAlias
Hostname        X.X.X.X
User            ubuntu
IdentityFile    path/to/mypem/file.pem

当我完成git config --global push.default simple 时,我在执行git push deploy 时遇到另一个问题:

fatal:当前分支 master 没有上游分支。推动 当前分支并将远程设置为上游,使用

git push --set-upstream deploy master

我会尝试做ssh -Tvv ubuntu@X.X.X.X 并告诉它进展如何。

【问题讨论】:

当您收到Permission denied 时,您的实例上/var/log/auth.log 生成的日志是什么? @clement89 这是tail的输出。 timestamp username CRON[31495]: pam_unix(cron:session): session opened for user root by (uid=0) timestamp username CRON[31495]: pam_unix(cron:session): session closed for user root. 【参考方案1】:

首先,帮自己一个忙,输入 git config --global push.default simple 以免看到错误的第一部分。

其次,如果您可以使用ssh ubuntu@X.X.X.X 成功登录,那么您的密钥以及实例名称都可以。

如果你不能,你可以:

尝试ssh -Tvv ubuntu@X.X.X.X 看看发生了什么,然后 通过转到服务器stopping sshd 并以调试模式(/usr/sbin/sshd -d)重新启动它来验证这一点:它将只接收一个 ssh 连接:尝试来自客户端的 ssh ubuntu@XXXX,您应该会看到 sshd回应。 然后正常重启sshd

在您的情况下,您必须使用您在 ~/.ssh/config 中定义的别名,因为您的密钥不是标准密钥。

为了让推送顺利进行,请发送git push -u deploy master

由于git remote -v 返回:

deploy  ssh://ubuntu@X.X.X.X/home/ubuntu/repo (fetch)
deploy  ssh://ubuntu@X.X.X.X/home/ubuntu/repo (push)

这意味着您没有使用 ssh 别名。

类型:

git remote set-url deploy myAlias:/home/ubuntu/repo

(语法很重要:myAlias: 后跟 repo 路径)

然后再试一次git push

【讨论】:

ssh -Tvv myAlias 工作正常,git push -u deploy master 在权限被拒绝的情况下生成相同的错误。 这太棒了,这完全解决了问题。谢谢你。你能解释一下为什么你的魔法有效吗?问题是我以前可以使用我以前的 git push 完成所有操作。 @SalvadorDali 你的 ssh url 必须使用 scp 语法(如***.com/a/14423667/6309),如果你想考虑你的~/.ssh/config,正如我在***.com/a/20596571/6309 中提到的那样。

以上是关于将提交推送到亚马逊 ec2 时权限被拒绝(公钥)的主要内容,如果未能解决你的问题,请参考以下文章

Amazon ec2 显示“权限被拒绝(公钥)”

无法将代码从 Vs Code 界面推送到 gitlab。 Git:git@gitlab.com:权限被拒绝(公钥,键盘交互)

将存储库推送到 Github 时权限被拒绝 [重复]

将文件推送到远程时权限被拒绝

使用 scp 将文件传输到 amazon ec2 实例总是给我拒绝权限(公钥,gssapi-with-mic)

git push:权限被拒绝(公钥)