我知道这里存在很多类似的问题(我在发布这个问题之前已经阅读了很多类似的问题),但是这个问题有所不同,所以请和我呆一段时间。
前几天我在亚马逊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名称已更改。 我多次摔倒了。密钥文件仍然有效,但是 “servername”已更改。
我实际上重启了我的机器,所以我认为这是非常相关的。问题是我无法理解我现在应该改变什么。
阅读了VonC的答案。
我不能通过ssh ubuntu@X.X.X.X
(我得到Permission denied (publickey).
)ssh到服务器,但我可以使用ssh myAlias
执行此操作,其中myAlias在~/.ssh/config
<中定义/ p>
Host myAlias
Hostname X.X.X.X
User ubuntu
IdentityFile path/to/mypem/file.pem
当我完成git config --global push.default simple
时,我在执行git push deploy
时遇到了另一个问题:
致命:当前的分支主机没有上游分支。推动 当前分支并将远程设置为上游,使用
git push --set-upstream deploy master
我会尝试做ssh -Tvv ubuntu@X.X.X.X
并告诉它如何进行。
答案 0 :(得分:2)
首先,帮自己一个忙,然后输入git config --global push.default simple
以便看不到错误的第一部分。
其次,如果您可以使用ssh ubuntu@X.X.X.X
成功登录,那么您的密钥以及实例名称都可以。
如果你不能,你可以:
ssh -Tvv ubuntu@X.X.X.X
看看会发生什么,/usr/sbin/sshd -d
)重新启动它:它只会收到一个ssh连接:从客户端尝试ssh ubuntu @XXXX,然后你应该看到sshd的反应
然后正常重启sshd
。在您的情况下, 使用<{1}}中定义的别名,因为您的密钥不是标准密码。
为了推动顺利进行,请执行~/.ssh/config
。
由于git push -u deploy master
返回:
git remote -v
这意味着您不使用ssh别名。
类型:
deploy ssh://ubuntu@X.X.X.X/home/ubuntu/repo (fetch)
deploy ssh://ubuntu@X.X.X.X/home/ubuntu/repo (push)
(语法很重要:git remote set-url deploy myAlias:/home/ubuntu/repo
后跟repo路径)
然后再次尝试myAlias:
。