๋ฐฐํฌ

๋ฐฐํฌ

SSH-Frontiรจre ๋ฐฐํฌ๋Š” 4๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค: ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ค์น˜, SSH ํ‚ค ๊ตฌ์„ฑ, ๋กœ๊ทธ์ธ ์…ธ ๋ณ€๊ฒฝ, sudoers๋กœ ๋ณด์•ˆ ๊ฐ•ํ™”.

1. ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ค์น˜

# ์„œ๋ฒ„๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ณต์‚ฌ
scp target/x86_64-unknown-linux-musl/release/ssh-frontiere root@serveur:/usr/local/bin/

# ์„œ๋ฒ„์—์„œ
chmod 755 /usr/local/bin/ssh-frontiere

2. ๊ตฌ์„ฑ ์„ค์น˜

# ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
mkdir -p /etc/ssh-frontiere

# ๊ตฌ์„ฑ ๋ณต์‚ฌ
cp config.toml /etc/ssh-frontiere/config.toml

# ๊ถŒํ•œ ๋ณด์•ˆ ์„ค์ • (์„œ๋น„์Šค ๊ณ„์ •์ด ๊ตฌ์„ฑ์„ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ)
chown root:forge-runner /etc/ssh-frontiere/config.toml
chmod 640 /etc/ssh-frontiere/config.toml

# ๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
mkdir -p /var/log/ssh-frontiere
chown forge-runner:forge-runner /var/log/ssh-frontiere
chmod 755 /var/log/ssh-frontiere

3. ์„œ๋น„์Šค ๊ณ„์ • ์ƒ์„ฑ

# ssh-frontiere๋ฅผ ๋กœ๊ทธ์ธ ์…ธ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ƒ์„ฑ
useradd -m -s /usr/local/bin/ssh-frontiere forge-runner

๋˜๋Š”, ๊ณ„์ •์ด ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ:

# ๋กœ๊ทธ์ธ ์…ธ ๋ณ€๊ฒฝ
chsh -s /usr/local/bin/ssh-frontiere forge-runner

์ฃผ์˜: ๋‹ค๋ฅธ ์„ธ์…˜์—์„œ SSH ์—ฐ๊ฒฐ์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜์ง€ ๋งˆ์„ธ์š”.

4. SSH ํ‚ค ๊ตฌ์„ฑ (์ œ1๊ณ„์ธต)

~forge-runner/.ssh/authorized_keys๋ฅผ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค:

# CI ๋Ÿฌ๋„ˆ ํ‚ค (ops ์ˆ˜์ค€)
command="/usr/local/bin/ssh-frontiere --level=ops",restrict ssh-ed25519 AAAA... runner-ci

# ๋ชจ๋‹ˆํ„ฐ๋ง ํ‚ค (read ์ „์šฉ)
command="/usr/local/bin/ssh-frontiere --level=read",restrict ssh-ed25519 AAAA... monitoring

# ๊ด€๋ฆฌ์ž ํ‚ค (admin ์ˆ˜์ค€)
command="/usr/local/bin/ssh-frontiere --level=admin",restrict ssh-ed25519 AAAA... admin-deploy

command= ์˜ต์…˜์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด๋Š” ๋ช…๋ น์— ๊ด€๊ณ„์—†์ด ์„ ํƒํ•œ --level๋กœ ssh-frontiere์˜ ์‹คํ–‰์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. restrict ์˜ต์…˜์€ ํฌํŠธ ํฌ์›Œ๋”ฉ, ์—์ด์ „ํŠธ ํฌ์›Œ๋”ฉ, PTY ๋ฐ X11์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

# ๊ถŒํ•œ ๋ณด์•ˆ ์„ค์ •
chmod 700 ~forge-runner/.ssh
chmod 600 ~forge-runner/.ssh/authorized_keys
chown -R forge-runner:forge-runner ~forge-runner/.ssh

5. sudoers ๊ตฌ์„ฑ (์ œ3๊ณ„์ธต)

/etc/sudoers.d/ssh-frontiere๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

# SSH-Frontiรจre: ์„œ๋น„์Šค ๊ณ„์ •์— ํ—ˆ๊ฐ€๋œ ๋ช…๋ น
forge-runner ALL=(root) NOPASSWD: /usr/local/bin/backup-config.sh *
forge-runner ALL=(root) NOPASSWD: /usr/local/bin/deploy.sh *
forge-runner ALL=(root) NOPASSWD: /usr/local/bin/healthcheck.sh

์™€์ผ๋“œ์นด๋“œ *๋Š” ์ธ์ž๋ฅผ ๋ฐ›๋Š” ์Šคํฌ๋ฆฝํŠธ์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: backup-config.sh forgejo). ์ธ์ž๊ฐ€ ์—†๋Š” ์Šคํฌ๋ฆฝํŠธ(์˜ˆ: healthcheck.sh)์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ๋ฒ•์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค:

visudo -c -f /etc/sudoers.d/ssh-frontiere

6. ํ™•์ธ

# ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ ํ…Œ์ŠคํŠธ (ํ˜„์žฌ ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜์ง€ ๋งˆ์„ธ์š”)

# ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์ด ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธ
{ echo "help"; echo "."; } | ssh forge-runner@serveur

# ๋ช…๋ น ํ…Œ์ŠคํŠธ
{ echo "infra healthcheck"; echo "."; } | ssh forge-runner@serveur

์‹ฌ์ธต ๋ฐฉ์–ด

์„ธ ๊ณ„์ธต์ด ์„œ๋กœ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค:

๊ณ„์ธต๋ฉ”์ปค๋‹ˆ์ฆ˜๋ณดํ˜ธ
1authorized_keys์˜ command= + restrict์ˆ˜์ค€ ๊ฐ•์ œ, ํฌ์›Œ๋”ฉ/PTY ์ฐจ๋‹จ
2SSH-Frontiรจre (๋กœ๊ทธ์ธ ์…ธ)TOML ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ๊ฒ€์ฆ
3sudoers์˜ sudo์‹œ์Šคํ…œ ๋ช…๋ น ์ œํ•œ

๊ณต๊ฒฉ์ž๊ฐ€ SSH ํ‚ค๋ฅผ ํƒˆ์ทจํ•˜๋”๋ผ๋„, ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ํ—ˆ๊ฐ€๋œ ๋ช…๋ น๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ2๊ณ„์ธต์„ ์šฐํšŒํ•˜๋”๋ผ๋„, sudoers์— ์˜ํ•ด ๊ถŒํ•œ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

๋กค๋ฐฑ

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋ฐ˜ ์…ธ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค:

# ์ฝ˜์†”(IPMI/KVM) ๋˜๋Š” ๋‹ค๋ฅธ ๊ด€๋ฆฌ ๊ณ„์ •์„ ํ†ตํ•ด
chsh -s /bin/bash forge-runner

๊ถŒ์žฅ: ๋กœ๊ทธ์ธ ์…ธ ๋ณ€๊ฒฝ ์ „์— /etc/passwd๋ฅผ ๋ฐฑ์—…ํ•˜์„ธ์š”.

cp /etc/passwd /etc/passwd.bak.$(date +%Y%m%d)

๋‹ค์Œ: ์ฒซ ์‚ฌ์šฉ โ€” SSH-Frontiรจre๋ฅผ ํ†ตํ•œ ์ฒซ SSH ๋ช…๋ น.