[git] EC2에서 Git을 푸시하는 방법

나는 지시 를 따르려고 노력하고있다 . 로컬 git 리포지토리가 있고 git 푸시를 수행 할 때 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하거나 ID 파일을.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의 의견에서 ) :

이상한 경로에 키가 있으면 그냥 실행하십시오 ssh-add /private/key/path. 이것은 나를 위해 일했습니다.



답변

로컬 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 public dns를 바꿉니다.

그러면 아마존에서 리모컨을 설정할 수 있습니다.


답변

여기 에 나열된 지침 이 더 유용했습니다.

링크에서 :

조정 ~/.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열쇠를 사용해야합니다 !


답변

로컬 컴퓨터에서 ~ / .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 폴더에 웹 서버가 실행해야하는 실제 “작업 파일”이 포함되어 있지 않다는 것입니다. 따라서 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”를 수행하면 코드가 베어 저장소로 푸시됩니다. 그러면 수신 후 후크 스크립트가 웹 서버가 읽도록 구성된 적절한 폴더로 파일을 체크 아웃합니다.


답변

SSH 키를 생성하고 EC2 인스턴스에 업로드해야합니다. 이 자습서를 따르십시오 : http://alestic.com/2010/10/ec2-ssh-keys


답변

이것이 가장 빠른 방법이라는 것을 알았습니다 : https://gist.github.com/matthewoden/b29353e266c554e04be8ea2058bcc2a0

원래:

ssh-add /path/to/keypair.pem ( “-add”는 ssh 바로 뒤에 있어야 함)

작동하는지 확인하십시오. ssh ubuntu@crazylongAWSIP (사용자 이름이 우분투가 아닐 수도 있습니다)

그 후 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 리포지토리를 설정하는 것입니다 (즉, 다른 git 리포지토리에서 가져 와서 푸시 할 수 있지만 파일을 보유하지 않음). 직접 (ec2에 지속적으로 ssh 할 필요없이 로컬 변경 사항을 ec2에 푸시하려는 경우 선호).

ec2에 NORMAL 리포지토리를 설정하려면 ec2에 ssh git init하고 원하는 위치 에서 수행 한 다음 다음을 수행하십시오.

git config receive.denyCurrentBranch updateInstead

참조 : “receeve deny current branch”에 대한 설명은 git 저장소로 푸시 할 수 없습니다 .


답변

  1. 로컬에서 실행ssh-keygen
  2. 당신에 지역 ~/.ssh/ 디렉토리 당신은 지금 볼 수 공개 키 라는 파일을 id_rsa.pub-받는 사람이 파일의 contens을 복사 /etc/ssh/authorized_keys하여에있는 파일, 원격 서버 .

내용을 복사하여 붙여 넣거나 먼저 원격 서버에 파일을 업로드하고 다음 명령을 사용할 수 있습니다.

cat id_rsa.pub >> /etc/ssh/authorized_keys


답변

나는 여기에 새로운 것을 게시하지 않고 있다고 생각하지만 위의 답변을 파헤쳐 내 특정 사례를 해결해야했습니다. 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 )

그 후 푸시가 잘 진행되었습니다.