git status : 현재 git 상태
git add : 작업 영역에서 stage 영역으로 변경사항 전달
stage 영역의 변경사항들은 commit 명령어를 통해 커밋할 수 있고 커밋된 사항들은 push 를 통해 원격저장소로 보낼 수 있다.
로컬이 아닌 원격저장소 상의 변경사항으로 갱신하기 위해 pull 을 사용한다.
git clone https://github.com/[username]/reponame.git
형식 | 명령어 |
---|---|
HTTPS 형식 | https://github.com/[username]/[repository_name].git |
SSH 형식 | git@github.com:[username]/[repository_name].git |
안전하게 외부 Git 서버에서 코드를 Clone 하거나 Push 할때 SSH 프로토콜을 사용한다.
공개키 인증 방식을 사용하려면 공개키와 개인키를 한쌍만들어야 한다.
공개키 : 외부에 공개되어도 괜찮고 접속하고자 하는 서버에 등록해놓는 용도로 사용한다.
개인키 : 사용자는 개인 키를 통해 SSH에 연결하고, 연결 요청을 받은 SSH 서버는 서버에 등록된 공개 키 중 요청된 개인 키 정보와 일치하는 공개 키를 찾는다. 일치하는 공개 키가 없다면 서버 인증에 실패한다. 인증이 성공하면 서버에 연결할 수 있다.
cd ~/.ssh
ls
sshKey.pem 은 ec2 에서 사용하는 것이고 따로 생성했던 개인키가 없으니 새로 생성한다.
ssh-keygen -t rsa -b 4096 -C "sample@example.com"
-t 옵션 : 생성할 ssh 키 유형 지정. 이 경우 rsa 키 생성 지정
-b 4096 옵션 : 생성할 키의 비트수 지정, 비트 수가 높을수록 키의 강도와 보안 수준이 향상
-C : 생성된 키에 넣을 주석 지정
첫 번째는 저장하고자 하는 위치, 두번째는 ssh 키에 대한 비밀번호 지정인데 github 에서 공식적으로 패스워드 지정을 권장한다.
개인키는 /Users/jihun/.ssh/id_rsa 에,
공개키는 /Users/jihun/.ssh/id_rsa.pub 에 저장되었다.
셸 스크립트 명령어중 cat 이라는 것이 파일의 내용을 출력해준다. 이를 통해 cat id_rsa 를 하면 개인키의 내용을 확인할 수 있다.
github 에는 cat id_rsa.pub 을 통해 출력된 결과물을 등록한다.
mac 기준
pbcopy < ~/.ssh/id_rsa.pub
을 통해 클립보드에 복사할 수 있다.
pbcopy : macOS 시스템에서 제공되는 명령어로 표준 입력으로 전달된 내용을 클립보드에 복사한다.
< : 명령어에서 표준 입력을 의미하며 위의 명령어에선 ~/.ssh/id_rsa.pub 의 내용을 pbcopy 명령어로 전달하는 역할을 한다.
settings - SSH and GPG keys
참고로 나의 ~/.ssh/config 의 config 은 700의 실행권한 (r, w, x 읽고 쓰고 실행할 권한) 이 부여된 상태이다.
vim ~/.ssh/config
일반적으로 User 에는 git 을 사용한다고 한다.
저장후 접속 테스트를 해보았다.
ssh -T git@github.com
-T 옵션 : 명령어를 대화식으로 실행하지 않고 터미널 입출력을 비활성화하는 역할. ssh 세션에서 터미널 상호작용이 필요하지 않을 때 사용하며 일반적으로 스크립트 및 자동화된 작업에서 사용된다.
오류를 확인해보니 오타이슈였다. 아래와 같이 수정후 다시 접속을 시도했다.
접속이 안되길래 확인해보니 User git 과 IdentifyFile 순서가 다른게 오류의 원인이었다.
인증 완료
원하는 디렉토리로 이동후
git clone git@github.com:Stendhalsynd/KDT-8-Web.git
ssh 방식으로 클론 성공
HTTPS, ssh, github cli 방식을 지원하는 github과 달리 겉보기로 gitlab 은 https 방식의 클론만 지원하는 것으로 보였다.
gitlab 에서의 프로젝트를 클론시 그 과정이 거의 동일했으나 ec2에 올릴때 차이가 났다.
ec2에 나의 프로젝트를 클론시 외부 컴퓨터에 프로젝트를 클론하므로 권한인증이 필요하여 username 과 pw 를 입력해야 하는 순간이 있었는데
github 의 경우 username 과 email 은 git config user.name, git config user.email 과 같지만 gitlab 의 경우엔 username, pw 는 gitlab 계정 자체의 username, pw 를 입력하는 것이었다.
자료조사를 더 하다보니 gitlab 도 ssh 방식으로 클론이 가능했다.
edit-profile-SSH Keys
github 과 같이 title, key (pbcopy 로 복사한 공개키)를 입력한다.
이렇게 agent pid 가 나오면 성공한 것이다.
ssh key 등록 완료
하지만 gitlab 이 공모전 측에서 제공해준거라 권한이 owner 가 아니고 maintainer라서 안뜨는 것일까?
타 블로그 사례를 보면 github 과 같이 ssh 방식으로 클론이 가능한 것으로 보인다.
이부분은 추후 개인 gitlab 사용시 다시 시도해봐야겠다.
나는 github 계정이 2개 있다. 그래서 git push origin main 을 하려고 하니 Permission error 가 발생했다. 이는 이전에 사용하던 계정과 새로 현재 사용중인 계정이 달라서 그런 것 같고 정확하게는 mac 기준 키체인 등록을 교체해줘야 했다.
키체인 접근을 열고 github 을 검색한다.
정보 가져오기를 하면
암호보기를 클릭시 암호를 변경할 수 있다.
이때의 암호는 github Settings-Developer Settings 에서 토큰을 발급받은 것과 같다.
모르는 단어가 등장했을때 그냥 넘어가면 안된다. 확실히 파악해야 한다고 생각한다.
이번에 자주 등장한 ssh 에 대해 확실히 파악하고자 했다.
ssh : Secure Shell 의 약자. 다른 PC 에 네트워크 경유로 로그인해서 자기 앞에 있는 PC 처럼 조작할 수 있다. 통신 경로는 암호화 되어 있어 안전하며 인터넷 경유라도 IP 주소만 알면 리모트 조작이 가능하다.
ssh [로그인할 사용자명]@[접속할 로그인 PC 주소]
위에서
ssh -T git@github.com
역시 ~/.ssh/config 에 User 로 git 을 저장했고 HOST 로 github.com 을 사용했던 것과 같은 형식이다.
참고로 ec2 인스턴스에 접속할때 나는 HOST 로 springboot-webservice 를 등록해둬서
ssh springboot-webservice
를 입력하면 다음과 같이 ec2 에 접속할 수 있다.
분명 git 에서 시작했는데 ssh 로 끝나는 이상한 흐름..
git 에서 자주 사용할 cli 명령어들에 대해 학습했고 그중 등장한 clone 과 ssh 에 대해 자세히 알아봤다.
이번 포스트를 작성하며 git 의 주 명령어, gitlab 과 github 의 clone 방식, ssh 의 개념에 대해 알게 되었다.