如何推动EC2上的git

zen*_*ngr 77 git amazon-ec2

我想按照这个指示.我有一个本地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/*
Run Code Online (Sandbox Code Playgroud)

更新(来自@ Jon的评论):

如果你的钥匙在奇数路径上运行ssh-add /private/key/path.这对我有用.

rea*_*lgt 49

要将本地ssh密钥复制到亚马逊,请尝试此操作

cat ~/.ssh/id_?sa.pub | ssh -i amazon-generated-key.pem ec2-user@amazon-instance-public-dns "cat >> .ssh/authorized_keys"
Run Code Online (Sandbox Code Playgroud)

当然,取代密钥和亚马逊ec2公共DNS的名称.

然后,您就可以在亚马逊上设置遥控器了

  • 我遵循了这个,但使用了rsa密钥而不是dsa密钥.另外,我在cat和>>之间添加了一个空格,如:"cat >> .ssh/authorized_keys" (3认同)
  • 这并没有回答我们在执行git push命令时如何指定键的问题 (3认同)

Tin*_*oni 27

这里列出的说明对我来说更有用.

从链接:

调整你的~/.ssh/config并添加:

Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/other_id_rsa
Run Code Online (Sandbox Code Playgroud)

现在使用ssh主机别名作为您的存储库:

$ git remote add origin example:repository.git
$ git pull origin master
Run Code Online (Sandbox Code Playgroud)

它应该使用other_id_rsa密钥!

  • 我也发现它有用到`git remote add ec2 ssh://ubuntu@54.243.293.151:zivot`.我不知道在那之前可以用`ssh://`为地址加前缀. (2认同)

dev*_*drc 19

在本地计算机上,编辑〜/ .ssh/config并添加:

Host example
Hostname example.com
User myuser
IdentityFile ~/.ssh/YOURPRIVATEKEY
Run Code Online (Sandbox Code Playgroud)

您应该能够使用"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
Run Code Online (Sandbox Code Playgroud)

现在,返回本地计算机,在设置遥控器时使用ssh主机别名.

git remote add ec2 EXAMPLEHOSTFROMSSHCONFIG:/path/to/project_folder.git
Run Code Online (Sandbox Code Playgroud)

现在,你应该能够做到:

git push ec2 master
Run Code Online (Sandbox Code Playgroud)

现在您的代码被推送到服务器没有任何问题.但此时的问题是,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
Run Code Online (Sandbox Code Playgroud)

现在,在您的本地计算机上,执行"git push ec2 master",它应该将代码推送到您的裸仓库,然后post-receive hook脚本会将您的文件签出到您的Web服务器配置为读取的相应文件夹中.


Jon*_*Jon 5

您需要生成并将SSH密钥上传到EC2实例.请遵循以下教程:http://alestic.com/2010/10/ec2-ssh-keys

  • 如果你的密钥在奇数路径中,只需运行`ssh-add/private/key/path`. (6认同)
  • 但我已经拥有了键值对私钥,我曾经登录过EC2. (2认同)
  • 我理解那部分,但这是一个Git配置问题. (2认同)