์ด๋ฒ ๊ธ์์๋ SSH ํค๋ฅผ ํ์ฉํ์ฌ GitHub ์๊ฒฉ ์ ์ฅ์์ ์์ ํ๊ฒ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก GitHub์ ์ฝ๋๋ฅผ pushํ๊ฑฐ๋ pullํ ๋ HTTPS ๋ฐฉ์์ ์ฌ์ฉํ ์๋ ์์ง๋ง, SSH ํค๋ฅผ ์ค์ ํ๋ฉด ๋งค๋ฒ ID/PW ๋ฅผ ์ ๋ ฅํ ํ์ ์์ด ๋น ๋ฅด๊ณ ์์ ํ๊ฒ GitHub๊ณผ ์ฐ๋ํ ์ ์์ต๋๋ค.
SSH ํค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ๋ถํฐ GitHub ์ ๋ฑ๋กํ๊ณ ์ฌ์ฉํ๋ ๊ณผ์ ๊น์ง ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌํ์์ต๋๋ค. ๐
1. SSH ํค๊ฐ ๋ญ์ง?
SSH(Secure Shell) ํค๋ ์๋ฒ(๋๋ Git ์๊ฒฉ ์ ์ฅ์)์ ํด๋ผ์ด์ธํธ(์ฌ์ฉ์ PC)๊ฐ ์ํธํ์ ์ผ๋ก ์์ ํ๊ฒ ํต์ ํ๊ธฐ ์ํ ์ธ์ฆ ๋ฐฉ์ ์ค ํ๋์ ๋๋ค.
- Public Key(๊ณต๊ฐํค): ๋๊ตฌ๋ ๊ฐ์ง์ ์๋ ํค (์๊ฒฉ ์๋ฒ๋ GitHub์ ๋ฑ๋ก๋จ) - โญ๊ณต๊ฐํค๋ฅผ ~/.ssh/id_rsa.pub -> ์ดํ ์๊ฒฉ์๋ฒ authorized_keys์ ์ถ๊ฐ
- Private Key(๊ฐ์ธํค): ์์ ์๋ง ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ ํค (๋ก์ปฌ ์ปดํจํฐ์ ์ ์ฅ๋จ)
- ์ํธํ ๋ณตํธํ ๋ฐฉ์
- ๊ณต๊ฐํค๋ก ์ํธํํ ๋ฐ์ดํฐ๋ ๊ฐ์ธํค๋ก๋ง ๋ณตํธํ ๊ฐ๋ฅ
- ๊ฐ์ธํค๋ก ์ํธํธํ ๋ฐ์ดํฐ๋ ๊ณต๊ฐํค๋ก๋ง ๋ณตํธํ ๊ฐ๋ฅ
- SSH ์ธ์ฆ์์๋ ์ฃผ๋ก ๊ฐ์ธํค๋ก ์๋ช ํ ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ฐํค๋ฅผ ์ด์ฉํด ๊ฒ์ฆํ๋ ๋ฐฉ์์ด ์ฌ์ฉ๋จ
๊ณต๊ฐํค์ ๊ฐ์ธํค ์ด ๋์ ์ง์ผ๋ก ์ฌ์ฉํ๋ฉด, ๋น๋ฐ๋ฒํธ ์์ด๋ ์์ ํ๊ฒ ์ ์ํ ์ ์์ต๋๋ค.
GitHub SSH ์ธ์ฆ ๊ณผ์ ์ ํ๋ฆ
[1] SSH ํค ์ ์์ฑ
[2] ๊ณต๊ฐํค๋ฅผ Github์ ๋ฑ๋ก
[3] SSH๋ฅผ ์ด์ฉํ GitHub ์ธ์ฆ๊ณผ์
์ฌ์ฉ์๊ฐ git push ๋ช ๋ น์ ์คํํ๋ฉด:
- ๋ก์ปฌ PC๋ ๊ฐ์ธํค(Private Key)๋ก ์๋ช ํ ๋ฐ์ดํฐ๋ฅผ GitHub ์๋ฒ๋ก ๋ณด๋
- GitHub ์๋ฒ๋ ๋ฑ๋ก๋ ๊ณต๊ฐํค(Public Key)๋ก ์๋ช ๊ฒ์ฆ
- ๊ฒ์ฆ์ด ์ฑ๊ณตํ๋ฉด push ์์ฒญ์ ์น์ธ
[4] ์ธ์ฆ ํ git push ์ฑ๊ณต! ๐
์๋ช ์ด ๊ฒ์ฆ๋๋ฉด GitHub๊ฐ ์์ฒญ์ ๋ฐ์๋ค์ฌ, push ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ฉ๋๋ค.
2. SSH ํค ์์ฑํ๊ธฐ
Windows ๊ธฐ์ค์ผ๋ก Git Bash์์ ๊ธฐ์กด์ SSH ํค ์์ด ์๋์ง ํ์ธํฉ๋๋ค.
cd ~/.ssh
ls
id_rsa ๋ฐ id_rsa.pub ์ ๊ฐ์ ํ์ผ์ด ๋ณด์ธ๋ค๋ฉด ์ด๋ฏธ SSH ํค ์์ด ์์ต๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ 5๋จ๊ณ๋ก ๋ฐ๋ก ์ด๋ํฉ๋๋ค.
๐ SSH ํค ์์ด ์๋ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ์ํค๋ฅผ ์์ฑํฉ๋๋ค.
ssh-keygen
์ต์ ์ผ๋ก
- -t rsa: ์์ฑํ ํค ํ์
- -C "your_email@gmail.com": ํค ์๋ณ์ฉ ์ฝ๋ฉํธ(์: GitHub ๊ณ์ ์ด๋ฉ์ผ)
์ ๋ช ๋ น์ ์ ๋ ฅํ๋ฉด ๊ฒฝ๋ก์ ๋น๋ฐ๋ฒํธ(ํจ์คํ๋ ์ด์ฆ) ๋ฑ์ ๋ฌป๋๋ฐ, ์ํฐ๋ง ๋๋ฅด๋ฉด ๊ธฐ๋ณธ๊ฒฝ๋ก(~/.ssh/id_rsa)์ ๋น ํจ์คํ๋ ์ด์ฆ ์งํํด๋ ๋ฌด๋ฐฉํฉ๋๋ค.
์์ฑ์ด ์๋ฃ๋๋ฉด, ~/.ssh ํด๋์ ๋ค์ ๋ ํ์ผ์ด ์๊น๋๋ค:
- id_rsa: (๊ฐ์ธํค, ์ธ๋ถ์ ์ ์ถ๋๋ฉด ์๋จ)
- id_rsa.pub: (๊ณต๊ฐํค, ์ด ํ์ผ ๋ด์ฉ์ ๋ณต์ฌํด GitHub ๋ฑ ์๋ฒ์ ๋ฑ๋ก)
3. SSH ์์ด์ ํธ(ssh-agent)์ SSH ํค ๋ฑ๋กํ๊ธฐ
SSH ์์ด์ ํธ๋?
SSH ์์ด์ ํธ๋ SSH ๊ฐ์ธํค(private Key)๋ฅผ ๊ด๋ฆฌํ์ฌ, ๋งค๋ฒ ๋น๋ฐ๋ฒํธ(passphrase)๋ฅผ ์ ๋ ฅํ์ง ์๊ณ ๋ ์์ ํ๊ฒ ์ธ์ฆํ ์ ์๋๋ก ๋๋ ํ๋ก๊ทธ๋จ์ ๋๋ค.
3.1 SSH ํค๋ฅผ ๋ฑ๋กํ๋ ์ด์
- SSH ํค๋ฅผ ์ฌ์ฉํด ์๊ฒฉ ์๋ฒ(GitHub, GitLab, AWS ๋ฑ)์ ์ฐ๊ฒฐํ ๋, ๋งค๋ฒ ํค ํ์ผ์ ์ ๋ ฅํ ํ์์์ด ์๋ ์ธ์ฆํ ์ ์์ต๋๋ค.
- SSH ํค์ ํจ์คํ๋ ์ด์ฆ๋ฅผ ์ค์ ํ ๊ฒฝ์ฐ, SSH ์์ด์ ํธ๊ฐ ํ ๋ฒ๋ง ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ ๋ค ์ธ์ ์ ์ ์งํ ์ ์์ต๋๋ค.
- SSH ํค๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ ๊ฒฝ์ฐ, ํน์ ์๋ฒ/์ ์ฅ์์ ๋ง๊ฒ ์๋์ผ๋ก ์ ํํ ์ ์์ต๋๋ค.
3.2 SSH ํค๋ฅผ SSH ์์ด์ ํธ์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ
1๏ธโฃ SSH ์์ด์ ํธ ์คํ
๐ Windows (Git Bash, PowerShell)
eval $(ssh-agent -s)
๐ macOS / Linux
eval "$(ssh-agent -s)"
→ pid(ํ๋ก์ธ์ค ID)๊ฐ ํ์๋๋ฉด SSH ์์ด์ ํธ๊ฐ ์ ์์ ์ผ๋ก ์คํ๋ ๊ฒ์ ๋๋ค.
2๏ธโฃ SSH ํค๋ฅผ ์์ด์ ํธ์ ๋ฑ๋ก
์ด์ ๋ก์ปฌ SSHํค๋ฅผ SSH ์์ด์ ํธ์ ์ถ๊ฐํฉ๋๋ค.
ssh-add ~/.ssh/id_rsa
โ๏ธ ์ด์ SSH ํค๊ฐ SSH ์์ด์ ํธ์ ๋ฑ๋ก๋์์ผ๋ฉฐ, ์๊ฒฉ ์๋ฒ(GitHub, GitLab ๋ฑ)์ ์ฐ๊ฒฐํ ๋ ์๋์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
3๏ธโฃ SSH ์์ด์ ํธ์ ๋ฑ๋ก๋ ํค ํ์ธ
ssh-add -l
โ๏ธ ์ฌ๊ธฐ์ ์ํ๋ ํค๊ฐ ๋์ค๋ฉด SSH ์์ด์ ํธ์ ์ ์์ ์ผ๋ก ๋ฑ๋ก๋ ๊ฒ์ ๋๋ค.
4. ๊ณต๊ฐํค(GitHub)์ ๋ฑ๋กํ๊ธฐ
SSH ํค๋ฅผ ์์ฑํ๋ฉด ๊ฐ์ธํค(id_rsa)์ ๊ณต๊ฐํค(id_rsa.pub)๊ฐ ์ง์ ์ด๋ฃจ๊ฒ ๋ฉ๋๋ค. ์ด์ id_rsa.pub(๊ณต๊ฐํค) ํ์ผ์ ๋ด์ฉ์ GitHub ๊ณ์ ์ ๋ฑ๋กํด์ผ ํฉ๋๋ค.
1. id_rsa.pub ๋ด์ฉ ๋ณต์ฌ
- ํด๋น ํ์ผ์ ๋ฉ๋ชจ์ฅ์ด๋ VS Code์์ ํ ์คํธ ์ ์ฒด๋ฅผ ๋ณต์ฌ ๋๋ cat id_rsa.pub ์ ์ฒด ๋ณต์ฌํฉ๋๋ค.
- ์) ssh-rsa AAAAB3NzaC1yc2EAAAA... your_email@gmail.com
2. GitHub ์น ์ฌ์ดํธ ์ ์ > ์ฐ์ธก ์๋จ ํ๋กํ ์์ด์ฝ ํด๋ฆญ > Settings
3. ์ผ์ชฝ ๋ฉ๋ด์์ SSH and GPG keys ํด๋ฆญ > New SSH key ๋ฒํผ
4. ๊ณต๊ฐํค ๋ถ์ฌ ๋ฃ๊ธฐ
- Title: "๊ฐ์ธ PC" ๋ฑ ์๋ณํ๊ธฐ ํธํ ์ด๋ฆ
- key: ๋ฐฉ๊ธ ๋ณต์ฌํ ๊ณต๊ฐํค ๋ถ์ฌ๋ฃ๊ธฐ
- Add SSH key ๋ฒํผ์ผ๋ก ์ ์ฅ
5. SSH ๊ณต๊ฐํค (id_rsa.pub)๋ฅผ GitHub์ ์ ๋ก๋ํ์์ต๋๋ค. ์ด์ GitHub์ SSH ์ฃผ์๋ง ์๊ณ ์์ผ๋ฉด ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ ๋ ฅํ์ง ์์๋ ์ฆ์ ํด๋น ์ ์ฅ์์ ์ ์์ด ๊ฐ๋ฅํฉ๋๋ค. ์ ๊ณผ์ ์ ๋ง์น๋ฉด GitHub์์ SSH ์ฐ๊ฒฐ์ด ํ์ฑํ๋์ด, ์์ผ๋ก ์๊ฒฉ ์ ์ฅ์์ git push/pull์ ํ ๋ ์ํธ ์ ๋ ฅ ์์ด ๋น ๋ฅด๊ฒ ์งํํ ์ ์์ต๋๋ค.
5. SSH ์ฐ๊ฒฐ ํ ์คํธ
๊ณต๊ฐํค ๋ฑ๋ก์ด ์ ๋๋ก ๋์๋์ง ํ ์คํธํด ๋ด ๋๋ค:
ssh -T git@github.com
์ ์์ ์ผ๋ก Hi <username>! You've successfully authenticated, but GitHub does not provide shell access. ๋ฉ์์ง๊ฐ ๋์ค๋ฉด ์ค์ ์๋ฃ
๋ง์ฝ Permission denied (publickey). ๋ฑ์ ์๋ฌ๊ฐ ๋ฌ๋ค๋ฉด,
- ๊ณต๊ฐํค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฑ๋ก๋์๋์ง
- SSH ์์ด์ ํธ(ssh-agent)๊ฐ ๋์์ค์ธ์ง
- ๊ฐ์ธํค์ ๊ฒฝ๋ก๊ฐ ๋ง๋์ง ํ์ธํฉ๋๋ค.
5.1 ๊ณต๊ฐํค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฑ๋ก๋์๋์ง ํ์ธ
SSH ํค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ GitHub(๋๋ ์๊ฒฉ ์๋ฒ)์ ๋ฑ๋ก๋์๋์ง ํ์ธํ๋ ค๋ฉด, ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค.
โ (1) SSH ํค ๋ชฉ๋ก ํ์ธ
ํ์ฌ ์ฌ์ฉ์ค์ธ SSH ํค๊ฐ ์๋์ง ํ์ธํ๋ ค๋ฉด:
ls -al ~/.ssh
โ๏ธ id_rsa.pub ํ์ผ์ด ์กด์ฌ ํด์ผํฉ๋๋ค.
โ ์๋ค๋ฉด SSH ํค๋ฅผ ๋ค์ ์์ฑํด์ผํฉ๋๋ค. (ssh-keygen ์ฌ์ฉ)
โ (2) ๊ณต๊ฐํค์ ๋ด์ฉ์ ํ์ธํ๊ณ GitHub์ ๋ฑ๋กํ๋์ง ์ฒดํฌ
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ๊ณต๊ฐํค ํ์ผ์ ํ์ธํ๊ณ ๋ณต์ฌํฉ๋๋ค:
cat ~/.ssh/id_rsa.pub
๐ ์ด ๋ด์ฉ์ ๋ณต์ฌํ์ฌ GitHub์ ๋ฑ๋กํ๋์ง ํ์ธ:
- GitHub์ ๋ก๊ทธ์ธ
- ์ฐ์ธก ์๋จ ํ๋กํ > Settings > SSH and GPG keys
- ๋ฑ๋ก๋ SSHํค๊ฐ ์๋์ง ํ์ธ(์๋ค๋ฉด ์๋ก ์ถ๊ฐ)
- ํค๋ฅผ ์๋ชป ๋ฑ๋กํ ๊ฒฝ์ฐ, ์ญ์ ํ ์ ํค ๋ฑ๋ก
๐ GitHub์์ "Keep my email address private" ์ต์ ์ด ํ์ฑํ๋์ด ์์ผ๋ฉด noreply.github.com์ฃผ์๋ก ์ค์ ๋ SSHํค๊ฐ ํ์ํ ์๋ ์์ต๋๋ค.
5.2 SSH ์์ด์ ํธ(ssh-agent)๊ฐ ๋์์ค์ธ์ง ํ์ธ
SSH ์์ด์ ํธ๊ฐ ์คํ์ค์ธ์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด ์ ๋ ฅ:
eval $(ssh-agent -s)
โ๏ธ pid ๊ฐ์ด ํ์๋๋ฉด SSH ์์ด์ ํธ๊ฐ ์คํ ์ค์ ๋๋ค.
โ ์คํ๋์ง ์๋๋ค๋ฉด ๋ค์ ์คํํด์ผ ํฉ๋๋ค.
5.3 ๊ฐ์ธํค์ ๊ฒฝ๋ก๊ฐ ๋ง๋ ํ์ธ
๋ง์ฝ SSH ์์ด์ ํธ์ ๋ฑ๋กํ๋๋ฐ๋ Permission denied (publickey) ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด, Git์ด SSH ํค๋ฅผ ์ฌ๋ฐ๋ฅธ ๊ฒฝ๋ก์์ ์ฐพ๊ณ ์๋์ง ํ์ธํด์ผํฉ๋๋ค.
โ (1) SSH ์ค์ ํ์ธ
cat ~/.ssh/config
โ๏ธ IdentityFile์ ์ค์ ๋ SSH ํค๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํฉ๋๋ค.
โ ๊ฒฝ๋ก๊ฐ ๋ค๋ฅด๋ค๋ฉด, ์ฌ๋ฐ๋ฅธ SSH ํค๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
์์ ํ๋ ค๋ฉด:
nano ~/.ssh/config
ํ์ํ ๊ฒฝ์ฐ ์๋ ๋ด์ฉ์ ์ถ๊ฐ ๋๋ ์์ ํฉ๋๋ค:
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa_hyonie
User hyonie
ํ์ผ์ ์ ์ฅํ ํ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํฉ๋๋ค:
ssh-add ~/.ssh/id_rsa
๋ชจ๋ ์ค์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ด ์๋์ง ๋ค์ SSH ์ฐ๊ฒฐ ํ ์คํธ๋ฅผ ํฉ๋๋ค.
5. Git ๋ฆฌํฌ์งํ ๋ฆฌ ์ค์
์ด์ ๋ก์ปฌ ํ๋ก์ ํธ๋ฅผ GitHub์ ์ฐ๋ํด๋ด ๋๋ค. ์์๋ก ์ git ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ง๋ ๋ค SSH ์ฃผ์๋ฅผ ๋ณต์ฌํฉ๋๋ค.
1. ๋ก์ปฌ ํ๋ก์ ํธ ํด๋๋ก ์ด๋
cd ~/Desktop/my-blog
2. Git ์ด๊ธฐํ(์ด๋ฏธ git init ๋์ด ์๋ค๋ฉด ์๋ต)
git init
git add .
git commit -m "Initial commit"
3. ์๊ฒฉ ์ถ๊ฐ
git remote add origin git@github.com:your-username/my-blog.git
git remote -v // ์ฐ๊ฒฐ ํ์ธ
4. ์ฒซ ํธ์
git push -u origin main
์ด์ ๋งค๋ฒ ID/PW ์ ๋ ฅ ์์ด SSH ํค ์ธ์ฆ์ผ๋ก ํธ์๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
6. ๋ง๋ฌด๋ฆฌ
์ ๋ฆฌํ์๋ฉด,
- SSH ํค ์์ฑ(ssh-keygen)
- SSH ์์ด์ ํธ์ ์ฌ์ฉ
- ๊ณต๊ฐํค๋ฅผ GitHub์ ๋ฑ๋ก
- SSH ์ฐ๊ฒฐ ํ์ธ (ssh -T git@github.com)
- ์๊ฒฉ ์ ํฌ์งํ ๋ฆฌ ์ฃผ์๋ฅผ SSH ํํ๋ก ์ถ๊ฐ (git remote add origin git@..)
์ด ๊ณผ์ ์ ํตํด ๋งค๋ฒ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ ํ์ ์์ด ํธ๋ฆฌํ๊ณ ์์ ํ๊ฒ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์งํํ ์ ์์ต๋๋ค.
๐ ์ฌ๋ฌ ๋์ ์ปดํจํฐ์์ ์์ ํ๋ค๋ฉด, ๊ฐ๊ฐ SSH ํค๋ฅผ ๋ง๋ค์ด GitHub์ ์ถ๊ฐํด๋ ๋ฉ๋๋ค.
๐ ํ์ฌ ๋ด๋ถ์์ ๋ณ๋ ์๋ฒ๋ฅผ ์ฌ์ฉํ ๋๋ ๋์ผํ ๋ฐฉ์์ผ๋ก SSH ํค๋ฅผ ๋ฑ๋ก ํ ์ ๊ทผํ๋ฉด ํธ๋ฆฌํฉ๋๋ค.