IT/기초 지식

[AWS] AWS CodeCommit의 ssh접속 상태에서 git clone하기까지

개발자 두더지 2021. 6. 25. 00:16
728x90

ssh-keygen으로 공개키, 비밀키를 생성하기


 linux의 ec2 인스턴스에 로그인한 상태로 콘솔 창에 다음과 같이 작성한다. (CodeCommit에 리포지터리 생성은 별도의 설정이 필요없으므로 여기서의 설명은 생략한다)

$ ssh-keygen

 그럼 다음과 같이 출력될 것이다.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa): 이 상태에서 "Enter"키 누르기
/home/ec2-user/.ssh/id_rsa already exists.
Overwrite (y/n)? "y"입력 후 "Enter"키 누르기
Enter passphrase (empty for no passphrase): 이 상태에서 "Enter"키 누르기
Enter same passphrase again: そのままEnter
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
The key fingerprint is:
ce:97:a8:d8:3b:d4:8d:95:22:68:e0:e2:8e:58:8d:ce ec2-user@ip-x-x-x-xx
The key's randomart image is:
+--[ RSA 2048]----+
| . 생략    .     |
+-----------------+

 그럼 각 행에 대해 옆에 한국어 설명 적힌대로 엔터 키를 누르거나 y를 입력한 후 엔터를 누르는 등의 진행한다. 그럼 키가 생성된 것이다.

 생성된 비밀키는 /home/ec2-user/.ssh/id_rsa에 공개키는 /home/ec2-user/.ssh/id_rsa.pub에 위치한다. 참고로 패스 안에 있는 "ec2-user"은 인스턴스를 생성할 때, 선택한 AMI에 따라 다르다. 

AMI 유저명
Amazon Linux 2 혹은 Amazon Linux AM ec2-user
CentOS AMI centos
Debian AMI admin
Fedora AMI ec2-user 혹은 fedora
RHEL AMI ec2-user 혹은 root
SUSE AMI  ec2-user 혹은 root
Ubuntu AMI ubuntu
그 외에  ec2-user 혹은 root

 예를 들어, AMI가 ubuntu인 경우에는 비밀키는  /home/ubuntu/.ssh/id_rsa에 공개키는 /home/ubuntu/.ssh/id_rsa.pub에 위치하게 된다.

 아무튼 cat 커맨드로 내용을 확인해 볼 수 있다.

$ cat /home/ec2-user/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAyZfh5ztQIQCwPIQAGFZD9kv1ihU9RP9WCBsfSp7JlNs0eNol
...생략
-----END RSA PRIVATE KEY-----

$ cat /home/ec2-user/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJl+HnO1AhALA8hAAYVkP2S/WKFT1E...생략

 

 

공개키를 CodeCommit의 IAM유저에 등록한다.


 서비스 검색 창에 "IAM" 검색 > "사용자 선택"  > 공개키를 등록할 유저 선택 > "보안 자격 증명" 탭 클릭한다. 아래의 메뉴가 보이면 된다.

 방금 cat 커맨드로 확인한 /home/ec2-user/.ssh/id_rsa.pub (공개키)의 내용을 복사한 뒤 "SSH 퍼블릭 키 업로드"를 클릭한 후 붙여 넣기 한다.

 업로드가 끝나면 SSH 키 ID가 생성된 것을 확인할 수 있다. 생성된 키는 설정시에 필요하므로 복사해두자.

 

 

 

ec2인스턴스에 로그인하여 ssh 접속상태로 git clone하기


 먼저 .ssh/ 파일 아래에 config파일을 생성한다. 파일 생성은 vi 커맨드로 할 수 있다. vi 커맨드와 관련해서는 다음의 포스팅을 참고하길 바란다. 

 

[Linux] vi 기초 사용법

vi는 Linux OS를 포함한 Unix베이스 OS에서 이용할 수 있는 텍스트 에디터이다. vi 커맨드의 기본 vi 는 Linux의 표준 에디터를 실행시키는 커맨드이다. 기본적인 사용법은 다음과 같다. $ vi 파일명 이미

engineer-mole.tistory.com

$ vi config

 config 내용은 다음과 같이 입력한다. 

Host git-codecommit.*.amazonaws.com
    User XXXXXXXXXXXXXXX
    IdentityFile ~/.ssh/id_rsa

 User의 XXXX부분에는 방금 복사한 SSH 키 ID를 붙여넣기 한다. 그다음 esc버튼을 누른 다음(커맨드 모드로 변경한 다음) 커맨드라인에 :wq를 입력하여 파일을 저장하고 vi를 종료한다.

 그 다음 작성한 config파일에 권한을 다음의 커맨드로 변경한다.

$ chmod 600 ~/.ssh/config

 마지막으로 code commit에서 생성한 리포지터리를 선택한 후 ssh 복제를 선택하거나 아래의 SSH 탭을 선택하면 나타나는 커맨드를 복사해서 입력하면 git clone이 된다. 

git clone의 기본 커맨드는 다음과 같다.

$ git clone ssh://git-codecommit.리전명.amazonaws.com/v1/repos/리포지토리

 

 

번외


 번외로 git clone시에 에러가 난다면, 업로드했던 공개키에 문제가 있는 경우가 있으므로 (입력 실수 등) 삭제후 공개키를 다시 업로드해보도록 하자. 그래도 공개키 설정에 대해 문제가 없느데 여전히 에러가 난다면, IAM유저에 AWSCodeCommit에 대한 권한을 추가하면 된다. 방법은 다음과 같다.

 SSH 키를 설정하던 화면에서 "권한 추가"를 클릭한다. 그 다음 세 가지 중 "기존 정책 직접 연결"을 선택한 후 검색창에 "AWSCodeCommit"을 입력한다. 그럼 다음과 같이 세 가지 결과가 출력된다. 

 세 가지 정책은 차이는 다음과 같다. AWSCodeCommitFullAccess이나 AWSCodeCommitPowerUser으로 권한을 추가한 후에 다시 git clone을 시도해보도록 하자.

정책 설명
AWSCodeCommitFullAccess CodeCommit의 모든 제어
AWSCodeCommitPowerUser 리퍼지토리의 삭제 불가능
AWSCodeCommitReadOnly 읽기 전용 (git push 불가능)

 


참고자료

https://qiita.com/yuyj109/items/5227d031aab3c71ede34

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/managing-users.html

https://qiita.com/shojimotio/items/8e5f9e0616bb5a67275d

728x90