github, bitbucket 같은 클라우드 사이트에 Client 프로그램으로 SSH 접속을 위해서는 SSH 키 쌍 생성하고 클라우드 사이트에 등록해야 한다. 보통 github, bitbucket 등 같은 SSH 접근을 지원하는 사이트는 ssh-agent forwarding 방식을 사용한다.
클라이언트에서 ssh 키 쌍을 생성
클라이언트에 개인키를 ssh-agent 에 등록
클라우드 서비스에 공개키를 등록
클라이언트 프로그램에서 ssh 사용시 ssh-agent 등록한 개인키로 암호화
여기서는 bitbucket 을 예로 들고 있다.
과정은 bitbucket 을 예로 들었지만 github 도 유사한 과정을 거친다. github에서 Key 등록에 대해서는 링크를 참조한다. github 에 SSH key 등록하기
SSH 구성과 2단계 인증 Git Credential Manager (GCM) 를 git client 에서 bitbucket 에 접속해 사용하는데 이용할 수 있다. SSH 구성을 하지 않고 bitbucket 을 사용하려면 GCM 을 사용하면 된다. Git Credential Manager
단, GCM works over HTTPS, not SSH. 그래서 git clone https://{username}@bitbucket.org/{workspace}/{repository}.git
이렇게 요청해야 한다.
설명에 따라서 먼저 ssh host key 를 생성하고 bitbucket 에서 사용하는 개인용 ssh key 를 만든다. 이후 bitbucket 에 등록하면 된다.
SSH Client Keys 저장소에 접근하는 url은 HTTPS or SSH 에 따라 달라진다.
HTTPS
https://<repo_owner>@bitbucket.org/<accountname>/<reponame>.git
SSH
git@bitbucket.org:<repo_owner>/<reponame>.git
or
ssh://git@bitbucket.org/<repo_owner>/<reponame>.git
bitbucket은 암호 알고리즘으로 keys: Ed25519, ECDSA, RSA, and DSA 를 지원한다.
예를 들어 아래 같이 생성한 공개키를 사용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 $ ssh-keygen -t ed25519 -b 256 $ ssh-keygen -t ecdsa -b 256 $ ssh-keygen -t rsa -b 2048 $ ssh-keygen -t dsa -b 1024
SSH Host Key 생성 아래는 bitbucket 서버의 공개키 이다.
1 2 3 256 SHA256:FC73VB6C4OQLSCrjEayhMp9UMxS97caD/Yyi2bhW/J0 bitbucket.org (ECDSA) 256 SHA256:ybgmFkzwOSotHTHLJgHO0QN8L0xErw6vd0VhFA9m3SM bitbucket.org (ED25519) 2048 SHA256:46OSHA1Rmj8E8ERTC6xkNcmGOw9oFxYr0WF6zWW8l1E bitbucket.org (RSA)
해당 공개키가 적적할지 확인은 다음 같이 curl 로 테스트해볼 수 있다.
1 curl https://bitbucket.org/site/ssh
개별키 생성 ssh 를 사용해서 bitbucket 클라우드에 접근하려면 사용하는 클라이언트에서 SSH 로 개인키와 공개키를 생성해야 한다. SSH 키를 생성하려면 아래 과정이 필요하다.
Open SSH 설치
SSH 서비스
SSH 키 생성
여기서 Linux/macOS 그리고 Windows 11 에서 키 쌍을 생성해서 bitbucket에 등록하는 과정을 살펴보겠다.
Windows 11에서 키 생성 Windows 11 에서 Git 이 설치되어 있다고 가정.
1 2 3 > get-command git Application git.exe 2.38 .1.1 C:\Program Files\Git\cmd\git.exe
Openssh 확인
1 2 > ssh -V OpenSSH_for_Windows_8.6 p1, LibreSSL 3.4 .3
ssh 명령 위치 확인
결과 ssh 명령을 git config 로 ssh 명령을 지정
1 git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe
SSH agent 시작 git 이 ssh 키를 사용하려면 SSH agent 가 시작되어야 한다. 보통 Git for windows 와 Windows 11 이후 Windows OpenSSH 를 사용하므로
Windows OpenSSH 사용자는 다음 같이 agent를 확인하고 시작한다.
1 2 3 4 5 > Get-Service ssh-agent Status Name DisplayName ------ ---- ----------- Stopped ssh-agent OpenSSH Authentication Agent
ssh-agent 서비스를 시작 하려면 Windows service에서 OpenSSH Authenticate Agent 서비스를 시작해 두어야 한다.
속성에서 시작으로 한다.
서비스가 정상적으로 시작되면 아래 명령으로 시작/종료 그리고 재시작을 할 수 있다. - 시작 안되어 있으면 알수없는 에러가 난다.
1 > Start-Service ssh-agent
Git for windows 를 사용하면 Git for windows의 bash 터미널 에서 다음 같이 확인하고 시작한다.
1 $ ps -a | grep ssh-agent
ssh-agent 를 시작한다.
에이젼트가 시작되면 git client 에서 ssh 정보를 얻을 수 있다.
bitbucket에 사용할 SSH key pair를 생성 ssh-keygen.exe로 키 쌍, 비밀키/공개키를 생성한다. 키를 생성시 bitbucket 계정의 e-mail 을 포함해 생성한다. 생성시 사용자 홈 디렉토리 .ssh
디렉토리에서 작업한다.
1 > ssh-keygen .exe -t rsa -b 4096 -C "EMAIL" -f "KEY_FILE"
EMAIL: bitbucket 계정 이메일
KEY_FILE: 파일 이름. 보통 bitbucket_work
.ssh
디렉토리에 키 쌍 KEY_FILE 과 KEY_FILE.pub 이 생성된다.
1 2 3 4 5 6 7 8 9 10 > dir .ssh Directory: C:\Users\daddy\.ssh Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2023-06-25 오후 6:11 3381 bitbucket_work -a--- 2023-06-25 오후 6:11 744 bitbucket_work.pub -a--- 2020-11-08 오전 12:12 1675 id_rsa -a--- 2020-11-08 오전 12:12 404 id_rsa.pub
이제 키를 SSH Agent 에 등록하자.
SSH Agent 에 키 등록 키 파일을 SSH Agent 에 등록한다. KEY_FILE 은 비밀키 파일을 지정하면 된다.
1 > ssh-add ~/.ssh/KEY_FILE
그리고 명확하게 bitbucket 에 해당 키를 사용하도록 ~/.ssh/config
에 아래 같이 등록한다.
1 2 3 Host bitbucket.org AddKeysToAgent yes IdentityFile ~/.ssh/KEY_FILE
macOS / Linux Openssh 확인
1 2 $ ssh -V OpenSSH_8.2p1 macOS, OpenSSL 1.1.1f 31 Mar 2020
ssh 명령이 없으면 macOS는 brew 로 설치한다.
Linux 는 apt, dnf, pacman 을 사용해 설치한다.
1 $ sudo apt update && sudo apt install openssh-client
SSH agent 시작 git 에서 ssh 키를 사용하려면 SSH agent 가 시작한다. bash 터미널 에서 다음 같이 확인하고 시작한다.
1 $ ps -a | grep ssh-agent
ssh-agent 를 시작한다.
이 명령을 ~/.bashrc
, ~/.zshrc
, ~/.profile,
등에 등록해 둔다. 에이젼트가 시작되면 git client 에서 ssh 정보를 얻을 수 있다.
bitbucket에 사용할 SSH key pair를 생성 ssh-keygen.exe로 키 쌍, 비밀키/공개키를 생성한다.
키를 생성시 bitbucket 계정의 e-mail 을 포함해 생성한다.
사용자 홈 디렉토리 .ssh
디렉토리에서 작업한다.
1 $ ssh-keygen -t rsa -b 4096 -C "EMAIL" -f "KEY_FILE"
EMAIL: bitbucket 계정 이메일
KEY_FILE: 파일 이름. 보통 bitbucket_work
.ssh
디렉토리에 키 쌍 KEY_FILE 과 KEY_FILE.pub 이 생성된다.
1 2 3 4 5 6 7 8 $ ls -l .ssh Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2023-06-25 오후 6:11 3381 bitbucket_work -a--- 2023-06-25 오후 6:11 744 bitbucket_work.pub -a--- 2020-11-08 오전 12:12 1675 id_rsa -a--- 2020-11-08 오전 12:12 404 id_rsa.pub
이제 키 쌍를 SSH Agent 에 등록하자.
SSH Agent 에 키 등록 키 파일을 SSH Agent 에 등록한다. KEY_FILE 은 비밀키 파일을 지정하면 된다.
1 $ ssh-add ~/.ssh/KEY_FILE
그리고 명확하게 bitbucket 에 해당 키를 사용하도록 ~/.ssh/config
에 아래 같이 등록한다.
1 2 3 Host bitbucket.org AddKeysToAgent yes IdentityFile ~/.ssh/KEY_FILE
Bitbucket Cloud with your public key bitbucket 을 위해 생성한 키 쌍에서 공개키 KEY_FILE.pub 를 bitbucket 의 계정에 등록해 주어야 한다.
Settings -> Personal Settings
Secutiry -> SSH Keys -> Add key
생성한 키 쌍에서 bitbucket_work.pub
같이 공개키를 등록하는데, 공개키 파일 내용을 복사해 붙여넣기를 하면 된다.
cat 명령 등으로 내용을 복사한다.
1 2 3 4 5 > cat .\.ssh\bitbucket_work.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDo+7 VGfxlhxFsy0Edu+PPmqngJVzwLQuLPanOi5x8t2yu7RmFNlEfU32AgA7vkoLno98XFZaUZ3ZjMwVu7LWeLMNczx5nH// ... ... +v7ttamzvFe8idOtCjJszG5l8rn4poIN2E24AWGvCGbzs55WRXY/amYEqP5/maH0NT+pYM2ZMV7Nt8Jb86iQ== james@thinkbee.kr
사이트의 Add key 창에 붙여 넣는다.
이제 새 SSH 키가 등록되었다.
클라이언트에서 bitbucket 에 SSH 접속이 가능한지 테스트한다. 단, 모든 SSH 연결은 최초 접속시 호스트 접속 여부를 묻는다. 아래 같이 bitbucket.org 접속시 접속 여부를 묻는 다이얼로그가 나온다.
1 2 3 4 5 6 7 8 9 $ ssh -T git@bitbucket.org The authenticity of host 'bitbucket.org (104.192.141.1)' can't be established. ED25519 key fingerprint is SHA256:ybgmFkzwOSotHTHLJgHO0QN8L0xErw6vd0VhFA9m3SM. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added ' bitbucket.org' (ED25519) to the list of known hosts. authenticated via ssh key. You can use git to connect to Bitbucket. Shell access is disabled
결과적으로 아래 같이 결과가 출력되면 성공한 상태다.
1 2 3 authenticated via ssh key. You can use git to connect to Bitbucket. Shell access is disabled
이제 git 클라이언트에서 HTTPS
, SSH
를 통해서 bitbucket 과 ssh 연결이 가능하다. git 클라이언트로 push, pull 등을 수행할 수 있다.
참고
https://support.atlassian.com/bitbucket-cloud/docs/configure-ssh-and-two-step-verification/
github 에 SSH key 등록하기