arko_renual/deploy/web/03-was-tunnel-key.sh
URP2026 7376c99f17
All checks were successful
deploy-dev / deploy (push) Successful in 36s
운영 웹서버(csv.wise.ai.kr) 구축 및 개발→운영 자동 배포 연결
웹 티어(211.37.173.197 / Rocky 8):
- csv.wise.ai.kr nginx vhost + Let's Encrypt SSL
- WAS는 SSH 터널(arko-was-tunnel.service)로 연결 — 개발서버가 NAT 뒤라
  8088이 포워딩되지 않고 Tomcat도 127.0.0.1 바인딩이기 때문이다.
  키는 WAS에서 restrict,permitopen="127.0.0.1:8088" 로 묶어 셸 접근 불가.
- 정적 리소스는 운영 웹이 직접 서빙하고 없으면 @was 폴백 — 전환 중에도 깨지지 않는다.

파이프라인:
  git push -> 개발 WAS 배포 -> 개발 헬스체크 -> 운영 웹 정적 배포 -> 운영 검증
개발 헬스체크를 통과한 뒤에만 운영으로 넘어간다.
접속 방향은 개발->운영(개발서버는 NAT 뒤라 역방향 접속이 불가능하다).
2026-07-29 17:50:32 +09:00

42 lines
1.5 KiB
Bash

#!/usr/bin/env bash
# WAS서버(zio-server / 101.79.17.164)에서 실행 — 웹서버의 터널 전용 공개키를 등록한다.
#
# 사용법: bash 03-was-tunnel-key.sh '<웹서버 공개키 한 줄>'
#
# WAS는 NAT 뒤에 있고 8088은 포워딩되지 않는다. 그래서 웹서버가 WAS로 SSH 터널을 열어
# 자기 쪽 127.0.0.1:8088 을 WAS의 127.0.0.1:8088 에 연결한다.
#
# 이 키는 터널 외에는 아무것도 못 하도록 묶는다:
# restrict 모든 기능 비활성(셸/PTY/에이전트/X11 전부 차단)
# port-forwarding 그 중 포트 포워딩만 다시 허용
# permitopen 열 수 있는 대상을 127.0.0.1:8088 하나로 제한
# 즉 이 키가 유출되어도 WAS에서 할 수 있는 일은 arko Tomcat 접속뿐이다.
set -euo pipefail
PUBKEY=${1:-}
[ -n "$PUBKEY" ] || { echo "사용법: $0 '<공개키>'"; exit 1; }
echo "$PUBKEY" | grep -q "^ssh-" || { echo "공개키 형식이 아니다"; exit 1; }
AK=/root/.ssh/authorized_keys
TS=$(date +%Y%m%d_%H%M%S)
RESTRICT='restrict,port-forwarding,permitopen="127.0.0.1:8088"'
mkdir -p /root/.ssh
chmod 700 /root/.ssh
touch "$AK"
cp -f "$AK" "$AK.bak_$TS"
echo "백업: $AK.bak_$TS"
KEY_BODY=$(echo "$PUBKEY" | awk '{print $2}')
if grep -q "$KEY_BODY" "$AK"; then
echo "이미 등록된 키 — 건너뜀"
else
echo "$RESTRICT $PUBKEY" >> "$AK"
echo "등록 완료"
fi
chmod 600 "$AK"
echo
echo "=== 현재 authorized_keys (키 본문은 생략) ==="
awk '{ printf "%-70s ... %s\n", substr($0,1,70), $NF }' "$AK"