我正在尝试遵循this指令。我有一个本地git repo,当我进行git推送时,我需要将repo推送到我的EC2实例。
但是,在上面的教程中,当我执行git push origin master
时,我收到Permission denied (publickey)
错误,因为我没有指定身份文件。
说,我这样登录EC2:ssh -i my_key.pem username@11.111.11.11
那么,我可以在这里执行类似的操作:git -i my_key.pem push origin master
或在.git/config
中设置身份文件
那么,我该如何设置呢?
更新:输出git config -l
user.name=my name
user.email=my_email_addreess@gmail.com
github.user=userid
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.url=ec2_id@my_e2_ip_address:express_app
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
更新(来自@ Jon的comment):
如果您的钥匙在奇数路径中,请运行ssh-add /private/key/path
。这对我有用。
答案 0 :(得分:47)
要将本地ssh密钥复制到亚马逊,请尝试使用
cat ~/.ssh/id_?sa.pub | ssh -i amazon-generated-key.pem ec2-user@amazon-instance-public-dns "cat >> .ssh/authorized_keys"
当然,替换密钥和亚马逊ec2公共DNS的名称。
然后您就可以在亚马逊上设置遥控器了
答案 1 :(得分:27)
列出的here说明对我来说更有用。
从链接:
调整~/.ssh/config
并添加:
Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/other_id_rsa
现在使用ssh主机别名作为您的存储库:
$ git remote add origin example:repository.git
$ git pull origin master
它应该使用other_id_rsa
键!
答案 2 :(得分:19)
在本地计算机上,编辑〜/ .ssh / config并添加:
Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/YOURPRIVATEKEY
您应该可以使用“ssh example”登录您的实例。请记住,您的私钥应该是chmod 400.一旦您可以在不使用“ssh -i mykey.pem username @ host”的情况下进行ssh,请执行以下操作。
在您的EC2实例上,初始化一个裸存储库,用于独占推送。惯例是将扩展名“.git”添加到文件夹名称。这可能与您的“project”文件夹中通常具有.git文件夹的本地仓库不同。裸存储库(根据定义)没有附加工作树,因此您无法像在普通的非裸存储库中那样轻松地向它们添加文件。这只是他们完成的方式。在您的ec2实例上:
mkdir project_folder.git
cd project_folder.git
git init --bare
现在,回到本地计算机上,在设置遥控器时使用ssh主机别名。
git remote add ec2 EXAMPLEHOSTFROMSSHCONFIG:/path/to/project_folder.git
现在,您应该可以:
git push ec2 master
现在您的代码被推送到服务器没有任何问题。但此时的问题是,ec2实例上的www文件夹不包含您的Web服务器需要执行的实际“工作文件”。因此,您需要设置一个“钩子”脚本,当您推送到ec2时将执行该脚本。此脚本将使用您的实际项目文件填充ec2实例上的相应文件夹。
因此,在您的ec2实例上,进入您的project_folder.git / hooks目录。然后创建一个名为“post-receive”的文件和chmod 775它(它必须是可执行的)。然后插入此bash脚本:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "ec2" == "$branch" -o "master" == "$branch" ]; then
git --work-tree=/var/www/example.com/public_html/ checkout -f $branch
echo 'Changes pushed to Amazon EC2 PROD.'
fi
done
现在,在您的本地计算机上,执行“git push ec2 master”,它应该将代码推送到您的裸仓库,然后post-receive hook脚本会将您的文件签出到您的Web服务器配置的相应文件夹中阅读。
答案 3 :(得分:5)
您需要生成并将SSH密钥上传到EC2实例。请遵循本教程:http://alestic.com/2010/10/ec2-ssh-keys
答案 4 :(得分:2)
ssh-keygen
~/.ssh/
目录中,您现在应该看到一个名为id_rsa.pub
的公钥文件 - 将此文件的竞争内容复制到{ {1}}文件,位于远程服务器上。 您可以复制并粘贴内容,也可以先将文件上传到远程服务器,然后使用以下命令:
/etc/ssh/authorized_keys
答案 5 :(得分:1)
我想,我不会在这里张贴任何新内容,但我必须深入研究上述答案,以解决我的具体案例。我在EC2上有一个Ubuntu实例。
要登录我的实例,我需要这样做:
ssh -i "pemfile.pem" ubuntu@very-long-amazon-address
密钥文件“pemfile.pem”必须在引号中。
我添加了遥控器:
remote add origin ubuntu@very-long-amazon-address/home/ubuntu/git/REPO/gitfile.git
但是当我试图推动时:
git push origin master
我得到了:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
为了解决问题,我做了:
/<path to pemfile>/pemfile.pem
哪位给了我回复,
Identity added: /<path to pemfile>/pemfile.pem (/<path to pemfile>/pemfile.pem )
之后,推动工作顺利。
答案 6 :(得分:1)
我发现这是最快捷的方式:https://gist.github.com/matthewoden/b29353e266c554e04be8ea2058bcc2a0
基本上:
ssh-add /path/to/keypair.pem
(&#34; -add&#34;需要在ssh后正确)
检查它是否有效:ssh ubuntu@crazylongAWSIP
(也许你的用户名不是ubuntu)
之后你可以在你的ec2上设置一个git repo并推送到它:
git remote add origin ec2Username@long-crazy-amazon-ip.com:/path/to/your/repo-name.git
git config --global remote.origin.receivepack "git receive-pack" # needed for aws ec2 stuff.
git push origin master
您可以选择设置“裸露”。你的ec2上的git repo(这意味着其他git repos可以从中拉出并推送到它,但它不会保存任何文件),或者你可以设置一个NORMAL repo并直接推送到它(我的偏好,如果你想要将本地更改推送到您的ec2,而不必经常ssh到您的ec2)。
如果你想在ec2上设置一个NORMAL回购,ssh到ec2,在你想要的地方做一个git init
,然后这样做:
git config receive.denyCurrentBranch updateInstead
请参阅:cannot push into git repository以解释&#34;收到拒绝当前分支&#34;
答案 7 :(得分:0)
在通过源代码管理进行部署时,我获得权限被拒绝,但无法找出原因。我意识到我的用户我正在创建一个ssh密钥(名为ubuntu,也是我的ec2服务器的推荐登录名)不是负责cap deploy(root)的用户。为root运行ssh-keygen并将该ssh密钥作为部署密钥上传到bitbucket解决了我的问题。
答案 8 :(得分:0)
我知道我已经太晚了,但我只是想分享这篇文章,在几秒钟内我就成功推向了EC2 git repo
http://shirtdev.wordpress.com/2011/05/04/setting-up-a-git-repository-on-an-amazon-ec2-instance/
答案 9 :(得分:0)
以下是最适合我的EASIEST方式...... 我无法克隆存储库...它没有识别我创建的SSH密钥...而不是更改配置文件和所有这些,我只是复制了它试图连接的REAL ssh密钥,我将其添加到bitbucket ......这是命令:
sudo vi /root/.ssh/id_rsa.pub
使用VI打开REAL RSA密钥并复制内容并粘贴到bitbucket中......完成!
答案 10 :(得分:-2)
对于其他可能感兴趣的人来说,这个解决方案对我来说是最干净,最简单的:
http://eric.sau.pe/accessing-a-git-repository-using-a-key-pair/