EC2에서 Git을 푸시하는 방법


78

나는 지시 를 따르려고 노력하고있다 . 로컬 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. 이것은 나를 위해 일했습니다.


16
ssh-add /private/key/path작동했습니다!
zengr 2011 년

1
효과가 있다고 말할 때 실제로 수행 한 작업에 대한 지침을 단계별로 추가 할 수 있습니까?
designermonkey

@Designermonkey 업데이트되었습니다.
zengr

로컬 또는 EC2 인스턴스에서 어떤 머신을 실행합니까? 구성에 무엇이 express_app있습니까?
designermonkey

@Designermonkey는 ec2 인스턴스에 있습니다. 노드의 익스프레스 프레임 워크 앱인 git repo의 이름입니다.
zengr

답변:


53

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

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


3
나는 이것을 따랐지만 dsa 키 대신 rsa 키를 사용했습니다. 또한, 나는 고양이 >> 사이에 공백을 추가, 같은 : "고양이 >> 스푸핑 / authorized_keys에"
cmcculloh

4
이것은 git push 명령을 실행할 때 키를 지정하는 방법에 대한 질문에 대답하지 않습니다
psvj

27

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

링크에서 :

조정 ~/.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
나는 또한 그것에서 git remote add ec2 ssh://ubuntu@54.243.293.151:zivot. 그 ssh://전에는 주소에 접두사를 붙일 수 있는지 몰랐습니다 .
isomorphismes

좋은 대답은 내가 이미 사용하고있는 ssh 구성을 활용하기를 바랬습니다.
Eric Wilson

대박. 완전한 URL을 찾는 것보다 낫습니다.
Saifur Rahman Mohsin 2015

20

로컬 컴퓨터에서 ~ / .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"를 수행하면 코드가 베어 저장소로 푸시됩니다. 그러면 수신 후 후크 스크립트가 웹 서버가 읽도록 구성된 적절한 폴더로 파일을 체크 아웃합니다.


1
이것은 나를 위해 작동합니다. chmod는 매우 중요합니다. @devdrc 더 편집하고 명령 줄 문을 강조해야 할 수도 있습니다.
Abel Callejo 2015 년

bash 스크립트 이전의 부분은 훌륭하게 작동했지만 bash 스크립트는 나를 위해 작동하지 않았습니다. 이 답변은 stackoverflow.com/a/24027870/847954 저에게 잘 맞았 습니다. 이 게시물에 대한 devdrc와 스크립트를 게시 한 @blamb에 감사드립니다.
jeff musk

당신이 있는지 확인해야합니다 @jeffmusk post-receive파일이 실행 가능
아벨 Callejo

5

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


2
하지만 EC2에 로그인하는 데 사용한 키-값 페어 프라이빗 키가 이미 있습니다.
zengr 2011 년

이 스레드에서 몇 가지 솔루션을 시도해보십시오. serverfault.com/questions/39733/…
Jon

2
나는 그 부분을 이해하지만 이것은 Git 구성 문제입니다.
zengr 2011 년

나는 당신의 구성에 잘못된 것이 없다고 생각하므로 SSH 키가 잘못 배치되었거나 그렇지 않은 것이 잘못되었다고 생각합니다.

6
이상한 경로에 키가 있으면 그냥 실행하십시오 ssh-add /private/key/path.

4

이것이 가장 빠른 방법이라는 것을 알았습니다 : 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 저장소로 푸시 할 수 없습니다 .


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

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

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


1
2 단계와 3 단계가 동일합니까?
JoeTidee

아니요, @JoeTidee-2 단계는 원격 서버에 키를 가져 오는 것이고 3 단계는 키를 올바른 위치에 추가하는 것입니다. :)
Alastair

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 )

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


5
"수정하려면 : / path to pemfile /"이라고 말했을 때 이해할 수 없습니다. my pemfile.pem은 아무 것도 실행하지 않습니다 .... ID를 추가하기 위해 어떤 명령을 사용합니까?
rikkitikkitumbo

키를 추가하는 데 사용한 명령을 지정하고 결론을 내리십시오.
Enginerd Sunio 19

0

나는 얻고 있었다 거부 허가를 소스 제어를 통해 배포 할 때와 이유를 알아낼 수 없었다. ssh 키를 생성하는 사용자 (우분투, 내 ec2 서버에 권장되는 로그인)가 cap deploy (root)를 담당하는 사용자가 아니라는 것을 깨달았습니다. 루트 용 ssh-keygen을 실행하고 해당 ssh 키를 bitbucket에 배포 키로 업로드하면 내 문제가 해결되었습니다.



0

저에게 가장 쉬운 방법이 있습니다. 저장소를 복제하는 데 문제가있었습니다 ... 제가 만든 SSH 키를 인식하지 못했습니다 ... 구성 파일 등을 변경하는 대신 REAL을 복사했습니다. ssh 키 연결을 시도했고 이것을 bitbucket에 추가했습니다 ... 다음은 명령입니다.

 sudo vi /root/.ssh/id_rsa.pub

VI를 사용하여 REAL RSA 키를 열고 내용을 복사하여 bitbucket에 붙여 넣었습니다 ... 완료!


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.