본문 바로가기
C.W.K.
Stream
Lesson 06 of 13 · published

SSH 배포

~10 min · ssh, vps, rsync

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

단일 서버 파이프라인 실전 적용

모든 프로젝트가 매니지드 클라우드 플랫폼에서 돌아가는 건 아니야. VPS 배포, 자체 호스팅 서버, 서버 군 관리, 홈랩 작업에서는 SSH 기반 배포가 솔직하고 믿을 만해. 보통 이런 패턴을 따르지.

  1. SSH 개인 키를 저장소 비밀값에 저장해.
  2. CI 환경에서 권한을 엄격하게 설정한 임시 파일에 키를 써.
  3. sshrsync로 연결해서 배포 스크립트를 실행해.

아니면 패키지 액션을 써도 좋아. 명령을 실행할 땐 appleboy/ssh-action, 파일을 동기화할 땐 burnett01/rsync-deployments를 쓰면 돼.

SSH 키 관리 수칙

  • CI 전용으로 새 키를 만들어. 개인 키는 절대 재사용하지 마.
  • 대상 서버의 authorized_keys 항목을 command="...", from="github-runner-ip-range" 또는 둘 다로 제한해.
  • 주기적으로 키를 교체해.
  • MITM 공격을 막으려면 CI에서 ~/.ssh/known_hosts에 호스트를 추가해.

Code

비밀값의 SSH 키로 rsync 배포·yaml
  deploy:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v4
      - run: ./build.sh
      - name: Setup SSH
        run: |
          umask 077
          mkdir -p ~/.ssh
          printf '%s\n' "${{ secrets.DEPLOY_SSH_KEY }}" > ~/.ssh/id_ed25519
          ssh-keyscan -H ${{ vars.DEPLOY_HOST }} >> ~/.ssh/known_hosts
      - name: Sync
        run: |
          rsync -av --delete ./dist/ \
            deploy@${{ vars.DEPLOY_HOST }}:/var/www/example/
      - name: Run deploy script remotely
        run: |
          ssh deploy@${{ vars.DEPLOY_HOST }} 'sudo systemctl reload nginx'

External links

Exercise

지금 개인 SSH 키로 VPS 배포를 하고 있다면, 배포 전용 키를 새로 만들어. 그리고 대상 서버에서 command=로 제한하고, 워크플로가 그 키를 쓰도록 마이그레이션해 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.