์๊ฐ
SSH-Frontiรจre ์๊ฐ
๋ฌธ์ ์
Linux ์๋ฒ์์ SSH ์๋น์ค ๊ณ์ (CI ๋ฌ๋, AI ์์ด์ ํธ, ์ ์ง๋ณด์ ์คํฌ๋ฆฝํธ)์ ์ผ๋ฐ์ ์ผ๋ก /bin/bash๋ฅผ ๋ก๊ทธ์ธ ์
ธ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค:
- ์ ์ด ๋ถ์ฌ: SSH ํด๋ผ์ด์ธํธ๊ฐ ๋ชจ๋ ๋ช ๋ น์ ์คํํ ์ ์์
- ๊ฐ์ฌ ๋ถ์ฌ: ์คํ๋ ๋ช ๋ น์ด ๊ตฌ์กฐํ๋ ๋ฐฉ์์ผ๋ก ๊ธฐ๋ก๋์ง ์์
- ์ธ๋ถํ ๋ถ์ฌ: ์ํ๋ฅผ ์ฝ๊ธฐ๋ง ํ๋ ์คํฌ๋ฆฝํธ์ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๊ฐ ๋์ผํ ๊ถํ์ ๊ฐ์ง
๊ธฐ์กด ์๋ฃจ์
(authorized_keys์ command=, bash ๋ํผ ์คํฌ๋ฆฝํธ, SSH ๋ฐฐ์ค์ฒ)์ ๊ฐ๊ฐ ํ๊ณ๊ฐ ์์ต๋๋ค: ์ทจ์ฝํ๊ฑฐ๋, ๊ฐ์ฌ๊ฐ ์ด๋ ต๊ฑฐ๋, ํ์์ ๋นํด ๊ณผ๋ํฉ๋๋ค.
SSH-Frontiรจre๊ฐ ํ๋ ์ผ
SSH-Frontiรจre๋ ๋์ฒด ๋ก๊ทธ์ธ ์
ธ์
๋๋ค. sshd์ ์์คํ
๋ช
๋ น ์ฌ์ด์ ์์นํฉ๋๋ค:
SSH ํด๋ผ์ด์ธํธ
|
v
sshd (ํค ์ธ์ฆ)
|
v
ssh-frontiere (๋ก๊ทธ์ธ ์
ธ)
|
โโโ TOML ๊ตฌ์ฑ์ ๋ฐ๋ผ ๋ช
๋ น ๊ฒ์ฆ
โโโ ์ ๊ทผ ์์ค ํ์ธ (read / ops / admin)
โโโ ํ๊ฐ๋ ๋ช
๋ น ์คํ
โโโ ๊ตฌ์กฐํ๋ JSON์ผ๋ก ๊ฒฐ๊ณผ ๋ฐํ
๊ฐ SSH ์ฐ๊ฒฐ์ ์๋ก์ด ssh-frontiere ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ฉฐ, ์ด ํ๋ก์ธ์ค๋:
- ๋ฐฐ๋์ ์๋ฒ ๊ธฐ๋ฅ์ ํ์
- ํด๋ผ์ด์ธํธ ํค๋๋ฅผ ์ฝ์ (์ธ์ฆ, ์ธ์ ๋ชจ๋)
- ๋ช
๋ น์ ์ฝ์ (
๋๋ฉ์ธ ์ก์ [์ธ์], ์ผ๋ฐ ํ ์คํธ) - TOML ํ์ดํธ๋ฆฌ์คํธ์ ๋ํด ๊ฒ์ฆ
- ํ๊ฐ๋๋ฉด ์คํ, ์๋๋ฉด ๊ฑฐ๋ถ
- JSON ์๋ต์ ๋ฐํํ๊ณ ์ข ๋ฃ
ํ๋ก๊ทธ๋จ์ ๋๊ธฐ์์ด๋ฉฐ ์ผํ์ฑ์ ๋๋ค: ๋ฐ๋ชฌ ์์, ์๋น์ค ์์, ์๊ตฌ ์ํ ์์.
SSH-Frontiรจre๊ฐ ํ์ง ์๋ ๊ฒ
- SSH ๋ฐฐ์ค์ฒ์ด ์๋: ํ๋ก์ ์์, ๋ค๋ฅธ ์๋ฒ๋ก์ ์ฐ๊ฒฐ ์ค๊ณ ์์
- ํค ๊ด๋ฆฌ์๊ฐ ์๋: SSH ํค ๊ด๋ฆฌ๋
authorized_keys์sshd์์ ์ฒ๋ฆฌ - ์ ธ์ด ์๋: ๋ช ๋ น ํด์ ์์, ํ์ดํ ์์, ๋ฆฌ๋ค์ด๋ ์ ์์, ๋ํํ ๊ธฐ๋ฅ ์์
- ๋ฐ๋ชฌ์ด ์๋: ๊ฐ ์ฐ๊ฒฐ๋ง๋ค ์คํ๋๊ณ ์ข ๋ฃ๋จ
๊ตฌ์ฒด์ ์ธ ์ฌ์ฉ ์ฌ๋ก
CI/CD ์๋ํ
Forgejo Actions ๋ฌ๋๊ฐ SSH๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํฉ๋๋ค:
# ๋ฌ๋๊ฐ SSH๋ฅผ ํตํด ๋ช
๋ น์ ์ ์ก
{
echo "forgejo deploy version=stable"
echo "."
} | ssh forge-runner@serveur
SSH-Frontiรจre๋ ๋ฌ๋๊ฐ admin ์์ค์ธ์ง, forgejo ๋๋ฉ์ธ์ deploy ์ก์
์ด ์กด์ฌํ๋์ง, version=stable ์ธ์๊ฐ ํ์ฉ๋ ๊ฐ์ธ์ง ํ์ธํ ํ ๊ตฌ์ฑ๋ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
AI ์์ด์ ํธ
Claude Code ์์ด์ ํธ๊ฐ ์ ํ๋ ๊ถํ์ผ๋ก ์๋ฒ์์ ์์ ํฉ๋๋ค:
# ์์ด์ ํธ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ช
๋ น์ ํ์
{ echo "list"; echo "."; } | ssh agent-ia@serveur
# ์์ด์ ํธ๊ฐ ํน์ ์ก์
์ ์คํ
{ echo "infra healthcheck"; echo "."; } | ssh agent-ia@serveur
์์ด์ ํธ๋ ์์ ์๊ฒ ๊ตฌ์ฑ๋ read ์์ค์ ์ก์
์๋ง ์ ๊ทผํ ์ ์์ต๋๋ค. help์ list ๋ช
๋ น์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์ก์
๊ณผ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ํ ์ ์์ผ๋ฉฐ, JSON ํ์์ผ๋ก ๋ค์ดํฐ๋ธ ํ์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
์๋ํ๋ ์ ์ง๋ณด์
cron ์คํฌ๋ฆฝํธ๊ฐ SSH๋ฅผ ํตํด ๋ฐฑ์ ์ ์คํํฉ๋๋ค:
# ์ผ๊ฐ ๋ฐฑ์
{ echo "forgejo backup-config"; echo "."; } | ssh backup@serveur
# ๋ฐฐํฌ ํ ์๋ฆผ
{ echo 'notify send message="๋ฐฐํฌ ์๋ฃ"'; echo "."; } | ssh notify@serveur
์๋ฆผ
SSH-Frontiรจre ํ์ค ์ก์ ์ผ๋ก ์๋ฆผ(Slack, Olvid, ์ด๋ฉ์ผ)์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค:
{ echo 'notify slack channel=ops message="Build OK"'; echo "."; } | ssh notify@serveur
์ ๋ค๋ฅธ ๊ฒ ๋์ SSH-Frontiรจre์ธ๊ฐ
...authorized_keys์ bash ์คํฌ๋ฆฝํธ ๋์ ?
authorized_keys์ command= ์ต์
์ ๋ช
๋ น์ ๊ฐ์ ํ ์ ์์ง๋ง:
- ํค๋น ํ๋์ ์คํฌ๋ฆฝํธ๋ง ๊ฐ๋ฅ โ ์ธ๋ถํ ์์
- ์ธ์ ๊ฒ์ฆ ์์
- ์ ๊ทผ ์์ค ์์
- ๊ตฌ์กฐํ๋ ๋ก๊น ์์
- bash ์คํฌ๋ฆฝํธ์ ์ทจ์ฝ์ ์ด ์์ ์ ์์ (์ธ์ ์ , ๊ธ๋ก๋น)
SSH-Frontiรจre๋ ์ ์ธ์ ๊ตฌ์ฑ, RBAC, JSON ๋ก๊น , ์ธ์ ์ ์ ์์ฒ ์ฐจ๋จํ๋ ๋ฌธ๋ฒ ํ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
...SSH ๋ฐฐ์ค์ฒ(Teleport, Boundary) ๋์ ?
SSH ๋ฐฐ์ค์ฒ์ ์ฌ๋์ ์๋ฒ ์ ๊ทผ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค:
- ๋ฐฐํฌ์ ์ ์ง๋ณด์๊ฐ ๋ฌด๊ฑฐ์
- ์๋น์ค ๊ณ์ ์๋ ๊ณผ๋ํจ
- ๋ค๋ฅธ ์ํ ๋ชจ๋ธ (๋ํํ ์ฌ์ฉ์ vs ์๋ํ ์คํฌ๋ฆฝํธ)
SSH-Frontiรจre๋ ์๋น์ค ๊ณ์ ์ ์ํด ์ค๊ณ๋ ๊ฒฝ๋ ์ปดํฌ๋ํธ(์ฝ 1 Mo)์ ๋๋ค: ๋ํํ ์ธ์ ์์, ํ๋ก์ ์์, ๋ช ๋ น ๊ฒ์ฆ๋ง ์ํ.
...sudo ๋จ๋
์ฌ์ฉ ๋์ ?
sudo๋ ๊ถํ ์์น์ ์ ์ดํ์ง๋ง:
- SSH ํด๋ผ์ด์ธํธ๊ฐ ๋ฌด์์ ์์ฒญํ ์ ์๋์ง ์ ์ดํ์ง ์์
- ๊ตฌ์กฐํ๋ ํ๋กํ ์ฝ ์์ (JSON ์ ์ถ๋ ฅ)
- SSH ๋ช ๋ น ์์ค์ ํตํฉ ๋ก๊น ์์
SSH-Frontiรจre์ sudo๋ ์ํธ ๋ณด์์ ์
๋๋ค: SSH-Frontiรจre๊ฐ ์์ ๋ช
๋ น์ ๊ฒ์ฆํ๊ณ (์ 2๊ณ์ธต), sudo๊ฐ ์์คํ
๊ถํ์ ์ ์ดํฉ๋๋ค(์ 3๊ณ์ธต). ์ฌ์ธต ๋ฐฉ์ด์ ์ 2๊ณ์ธต๊ณผ ์ 3๊ณ์ธต์
๋๋ค.
์ ํ์ ๊ฐ์น
SSH-Frontiรจre๋ SSH ์๋น์ค ์ ๊ทผ์ ๋ํ ์ ์ธ์ ๊ฑฐ๋ฒ๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค:
-
๋ชจ๋ ๊ฒ์ด ํ๋์ TOML ํ์ผ์: ๋๋ฉ์ธ, ์ก์ , ์ธ์, ์ ๊ทผ ์์ค. ์คํฌ๋ฆฝํธ์ ๋ถ์ฐ๋ ๋ก์ง ์์.
-
์ฆ์ ๋ฐฐํฌ: ๋ชจ๋ ๊ตฌ์ฑ์ด ํ๋์ TOML ํ์ผ์ ์ง์ค๋์ด ์์ด ์ ๋ฒ์ ๋ฐฐํฌ๊ฐ ๊ฐ๋จํฉ๋๋ค. ๊ฐ SSH ์ฐ๊ฒฐ์ ๊ตฌ์ฑ์ ๋ค์ ์ฝ๋ ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ฏ๋ก, ๋ณ๊ฒฝ ์ฌํญ์ ํ์ฌ ์ธ์ ์ด ๋๋๋ ์ฆ์ ๋๋ ์ ํด๋ผ์ด์ธํธ์ ๋ํด ์ฆ์ ์ ์ฉ๋ฉ๋๋ค.
-
๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ก ํธ๋ฌ์คํธ: ๋ช ์์ ์ผ๋ก ๊ตฌ์ฑ๋์ง ์์ผ๋ฉด ์๋ฌด๊ฒ๋ ์คํ๋์ง ์์ต๋๋ค. ์ ธ ์์, ์ธ์ ์ ๋ถ๊ฐ.
-
๊ฐ์ฌ ๊ฐ๋ฅ: ๋ชจ๋ ์๋(ํ๊ฐ ๋๋ ๊ฑฐ๋ถ)๊ฐ ํ์์คํฌํ, ๋ช ๋ น, ์ธ์, ์์ค, ๊ฒฐ๊ณผ์ ํจ๊ป ๊ตฌ์กฐํ๋ JSON์ผ๋ก ๊ธฐ๋ก๋ฉ๋๋ค.
-
LLM ํธํ: AI ์์ด์ ํธ๊ฐ
help/list๋ฅผ ํตํด ์ฌ์ฉ ๊ฐ๋ฅํ ์ก์ ์ ํ์ํ๊ณ , ๊ตฌ์กฐํ๋ JSON ํ๋กํ ์ฝ๋ก ์ํธ์์ฉํ ์ ์์ต๋๋ค โ ์์ ํ ์คํธ ํ์ฑ์ด ํ์ ์์ต๋๋ค. -
์ ๋ฝ์ฐ ์คํ์์ค: EUPL-1.2 ๋ผ์ด์ ์ค, ํ๋์ค์์ ๊ฐ๋ฐ, ๋ ์ ์ํ๊ณ์ ๋ํ ์์กด์ฑ ์์.
๋ ์์๋ณด๊ธฐ: ์ค์น | ์ํคํ ์ฒ | ๋ณด์ | ๋์