๋ฐฐํฌ
๋ฐฐํฌ
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
์ฌ์ธต ๋ฐฉ์ด
์ธ ๊ณ์ธต์ด ์๋ก ๋ณด์ํฉ๋๋ค:
| ๊ณ์ธต | ๋ฉ์ปค๋์ฆ | ๋ณดํธ |
|---|---|---|
| 1 | authorized_keys์ command= + restrict | ์์ค ๊ฐ์ , ํฌ์๋ฉ/PTY ์ฐจ๋จ |
| 2 | SSH-Frontiรจre (๋ก๊ทธ์ธ ์ ธ) | TOML ํ์ดํธ๋ฆฌ์คํธ์ ๋ํด ๊ฒ์ฆ |
| 3 | sudoers์ 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 ๋ช ๋ น.