Tools & Tips

๐Ÿ” GitHub SSH ์ธ์ฆ ์„ค์ •ํ•˜๊ธฐ - ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด Git ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•


GitHub์—์„œ 2021๋…„ 8์›”๋ถ€ํ„ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ์„ ์ค‘๋‹จํ•˜๋ฉด์„œ, Git ์ž‘์—… ์‹œ Personal Access Token(PAT)์ด๋‚˜ SSH ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๋” ํŽธ๋ฆฌํ•˜๊ณ  ์•ˆ์ „ํ•œ SSH ํ‚ค ์ธ์ฆ ์„ค์ • ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์™œ SSH๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ์š”?

  • ๋ณด์•ˆ: ๊ฐœ์ธํ‚ค/๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™” ๋ฐฉ์‹์œผ๋กœ ๋” ์•ˆ์ „
  • ํŽธ๋ฆฌํ•จ: ํ•œ ๋ฒˆ ์„ค์ •ํ•˜๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ๋ถˆํ•„์š”
  • ์•ˆ์ •์„ฑ: ํ† ํฐ ๋งŒ๋ฃŒ ๊ฑฑ์ • ์—†์Œ

๐Ÿš€ SSH ํ‚ค ์ƒ์„ฑํ•˜๊ธฐ

1. ๊ธฐ์กด SSH ํ‚ค ํ™•์ธ

ํ„ฐ๋ฏธ๋„์—์„œ ๊ธฐ์กด SSH ํ‚ค๊ฐ€ ์žˆ๋Š”์ง€ ๋จผ์ € ํ™•์ธํ•ด๋ณด์„ธ์š”.

ls -la ~/.ssh

id_rsa, id_ed25519 ๋“ฑ์˜ ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด ์ด๋ฏธ SSH ํ‚ค๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

2. SSH ํ‚ค ์ƒ์„ฑ

๊ธฐ์กด ํ‚ค๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.

ssh-keygen -t ed25519 -C "your_email@example.com"

๐Ÿ’ก ํŒ: your_email@example.com ๋ถ€๋ถ„์„ ๋ณธ์ธ์˜ GitHub ๊ณ„์ • ์ด๋ฉ”์ผ๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.

์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ๋“ค์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/username/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

๋ชจ๋‘ Enter๋ฅผ ๋ˆŒ๋Ÿฌ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

3. SSH ์—์ด์ „ํŠธ์— ํ‚ค ์ถ”๊ฐ€

# SSH ์—์ด์ „ํŠธ ์‹œ์ž‘
eval "$(ssh-agent -s)"

# ์ƒ์„ฑํ•œ ํ‚ค๋ฅผ ์—์ด์ „ํŠธ์— ์ถ”๊ฐ€
ssh-add ~/.ssh/id_ed25519

๐Ÿ”— GitHub์— SSH ํ‚ค ๋“ฑ๋กํ•˜๊ธฐ

1. ๊ณต๊ฐœํ‚ค ๋ณต์‚ฌ

์ƒ์„ฑ๋œ ๊ณต๊ฐœํ‚ค ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

cat ~/.ssh/id_ed25519.pub

ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅ๋œ ๋‚ด์šฉ์„ ์ „์ฒด ์„ ํƒํ•ด์„œ ๋ณต์‚ฌํ•˜์„ธ์š”. ssh-ed25519๋กœ ์‹œ์ž‘ํ•ด์„œ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋กœ ๋๋‚˜๋Š” ํ•œ ์ค„์˜ ๊ธด ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

2. GitHub ์„ค์ • ํŽ˜์ด์ง€๋กœ ์ด๋™

  1. GitHub.com์— ๋กœ๊ทธ์ธ
  2. ์šฐ์ƒ๋‹จ ํ”„๋กœํ•„ ์‚ฌ์ง„ ํด๋ฆญ
  3. Settings ์„ ํƒ

3. SSH ํ‚ค ์ถ”๊ฐ€

  1. ์™ผ์ชฝ ์‚ฌ์ด๋“œ๋ฐ”์—์„œ SSH and GPG keys ํด๋ฆญ
  2. New SSH key ๋ฒ„ํŠผ ํด๋ฆญ
  3. ํผ ์ž‘์„ฑ:
    • Title: ๊ตฌ๋ณ„ํ•˜๊ธฐ ์‰ฌ์šด ์ด๋ฆ„ (์˜ˆ: โ€œ๋‚ด ๋…ธํŠธ๋ถโ€, โ€œํšŒ์‚ฌ ์ปดํ“จํ„ฐโ€)
    • Key: ๋ณต์‚ฌํ•œ ๊ณต๊ฐœํ‚ค ๋‚ด์šฉ ๋ถ™์—ฌ๋„ฃ๊ธฐ
  4. Add SSH key ํด๋ฆญ

โš™๏ธ Git ์ €์žฅ์†Œ์— SSH ์ ์šฉํ•˜๊ธฐ

๊ธฐ์กด HTTPS ์ €์žฅ์†Œ๋ฅผ SSH๋กœ ๋ณ€๊ฒฝ

์ด๋ฏธ HTTPS๋กœ ํด๋ก ํ•œ ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์›๊ฒฉ URL์„ SSH๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# ํ˜„์žฌ ์›๊ฒฉ URL ํ™•์ธ
git remote -v

# HTTPS๋ฅผ SSH๋กœ ๋ณ€๊ฒฝ
git remote set-url origin git@github.com:username/repository.git

์˜ˆ์‹œ: https://github.com/jmkim1914/dog_care.git โ†’ git@github.com:jmkim1914/dog_care.git

์ƒˆ๋กœ ํด๋ก ํ•  ๋•Œ

# SSH URL๋กœ ํด๋ก 
git clone git@github.com:username/repository.git

๐Ÿงช SSH ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ

์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ด๋ณด์„ธ์š”.

ssh -T git@github.com

์„ฑ๊ณตํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค:

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

๐ŸŽฏ ์‹ค์ œ ์‚ฌ์šฉํ•˜๊ธฐ

์ด์ œ Git ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ์—†์ด ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

# ํŒŒ์ผ ๋ณ€๊ฒฝ ํ›„ ํ‘ธ์‹œ
git add .
git commit -m "Update README"
git push origin main  # ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ๋ถˆํ•„์š”! ๐ŸŽ‰

๐Ÿ”ง ๋ฌธ์ œ ํ•ด๊ฒฐ

Permission denied (publickey) ์—๋Ÿฌ

SSH ํ‚ค๊ฐ€ ์ œ๋Œ€๋กœ ๋“ฑ๋ก๋˜์ง€ ์•Š์•˜์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ณต๊ฐœํ‚ค๊ฐ€ ์ •ํ™•ํžˆ ๋ณต์‚ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
  2. SSH ์—์ด์ „ํŠธ์— ํ‚ค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธ: ssh-add -l
  3. GitHub์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ‚ค๊ฐ€ ๋“ฑ๋ก๋œ ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅธ ํ‚ค์ธ์ง€ ํ™•์ธ

SSH ์—์ด์ „ํŠธ ๊ด€๋ จ ์—๋Ÿฌ

# SSH ์—์ด์ „ํŠธ ์žฌ์‹œ์ž‘
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

SSH ์ธ์ฆ ์„ค์ •์„ ํ†ตํ•ด ๋” ์•ˆ์ „ํ•˜๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ GitHub๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

์š”์•ฝ

  1. โœ… SSH ํ‚ค ์ƒ์„ฑ
  2. โœ… GitHub์— ๊ณต๊ฐœํ‚ค ๋“ฑ๋ก
  3. โœ… Git ์ €์žฅ์†Œ URL์„ SSH๋กœ ๋ณ€๊ฒฝ
  4. โœ… ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ

์ด์ œ ๋งค๋ฒˆ ํ† ํฐ์ด๋‚˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•  ํ•„์š” ์—†์ด git push, git pull ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.