如何在EC2上推送到git

如何在EC2上推送到git,git,amazon-ec2,Git,Amazon Ec2,我试着按照指示去做。我有一个本地git repo,当我进行git推送时,我需要将repo推送到我的EC2实例 但是,在上面的教程中,当我执行git push origin master时,我会得到权限拒绝(publickey)错误,因为我没有指定标识文件 比如说,我像这样登录到EC2:ssh-I my_key.pemusername@11.111.11.11 因此,我可以在这里执行类似的操作:git-I my_key.pem push origin master或在.git/config中设置标

我试着按照指示去做。我有一个本地git repo,当我进行git推送时,我需要将repo推送到我的EC2实例

但是,在上面的教程中,当我执行
git push origin master
时,我会得到
权限拒绝(publickey)
错误,因为我没有指定标识文件

比如说,我像这样登录到EC2:
ssh-I my_key.pemusername@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's):


如果您的密钥位于奇数路径中,只需运行
ssh add/private/key/path
。这对我很有用。

您需要生成SSH密钥并将其上载到EC2实例。按照本教程操作:

要将本地ssh密钥复制到amazon,请尝试以下操作

cat ~/.ssh/id_?sa.pub | ssh -i amazon-generated-key.pem ec2-user@amazon-instance-public-dns "cat >> .ssh/authorized_keys"
当然,替换密钥和amazon ec2公共dns的名称

然后您就可以在amazon上设置遥控器了

列出的说明对我更有用

从链接:

调整
~/.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
它应该使用
其他\u id\u rsa

  • 在本地运行ssh-keygen
  • 在您的本地
    ~/.ssh/
    目录中,您现在应该看到一个名为
    id\u rsa.pub
    公钥文件-将此文件的内容复制到
    /etc/ssh/authorized\u keys
    文件中,该文件位于您的远程服务器上 您可以复制并粘贴内容,也可以先将文件上载到远程服务器,然后使用以下命令:


    cat id\u rsa.pub>/etc/ssh/authorized\u keys

    通过源代码管理进行部署时,我被拒绝了权限,无法找出原因。我意识到我创建ssh密钥的用户(名为ubuntu,也是我ec2服务器的推荐登录名)不是负责cap部署(root)的用户。为root用户运行ssh-keygen并将该ssh密钥作为部署密钥上载到bitbucket解决了我的问题

    我知道我做这件事已经太迟了,但我只想与大家分享这篇文章,我在几秒钟内就成功地将它推到了EC2 git repo上


    这是最简单的方法,对我来说非常有效。。。 我在克隆存储库时遇到问题。。。它无法识别我创建的SSH密钥。。。我没有更改您的配置文件和所有这些,而是简单地复制了它试图连接的真正ssh密钥,并将其添加到bitbucket中。。。命令如下:

     sudo vi /root/.ssh/id_rsa.pub
    

    使用VI打开真正的RSA密钥,复制内容并粘贴到bitbucket。。。完成了

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

    Host example
    Hostname example.com
    User myuser
    IdentityFile ~/.ssh/YOURPRIVATEKEY
    
    您应该能够使用“ssh-example”登录到您的实例。请记住,您的私钥应该是chmod 400。一旦您可以在不使用“ssh-i mykey.pem”的情况下使用ssh登录username@host“,请执行以下操作

    在EC2实例上,初始化一个裸存储库,该存储库用于以独占方式推送到。约定是将扩展名“.git”添加到文件夹名中。这可能与您的本地回购不同,后者通常在“项目”文件夹中包含as.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”,它会将代码推送到您的裸repo,然后post receive钩子脚本会将您的文件签出到您的Web服务器配置为读取的相应文件夹中。

    对于其他可能感兴趣的人来说,这个解决方案对我来说是最干净、最简单的:


    我想,我在这里没有发布任何新的内容,但我必须仔细阅读上述答案,以解决我的特殊情况。我在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
    
    //pemfile.pem
    
    这给了我一个回应

    Identity added: /<path to pemfile>/pemfile.pem (/<path to pemfile>/pemfile.pem )
    
    添加了标识://pemfile.pem(//pemfile.pem)
    在那之后,推得很顺利。

    我发现这是最快的方法:

    基本上:

    ssh add/path/to/keypair.pem
    (“-add”必须在ssh之后)

    通过:
    ssh检查它是否工作ubuntu@crazylongAWSIP
    (可能您的用户名不是ubuntu)

    之后,您可以在ec2上设置git回购并推送到它:

    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 repo可以从中提取并推送到它,但它不会保存任何文件),或者您可以设置一个普通的repo并直接推送到它(如果您想将本地更改推送到ec2而不必不断地将ssh插入ec2中,我的首选)

    如果您想在ec2上建立一个正常的repo,请将ssh-in连接到ec2,然后执行
    git-in
    
    git config receive.denyCurrentBranch updateInstead