C.W.K.
Stream
Lesson 06 of 13 · published

SSH deploy

~10 min · ssh, vps, rsync

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

실용적 단일 서버 pipeline

모든 프로젝트가 managed cloud 플랫폼에 살지는 않아. VPS deploy, self-hosted 서버, fleet 관리, 홈랩 작업은 SSH 기반 deploy 가 정직하고 신뢰성 있어. 패턴:

  1. SSH private key 를 repo secret 으로 저장.
  2. CI 에서 엄격한 권한으로 임시 파일에 key 쓰기.
  3. ssh 또는 rsync 로 연결; deploy 스크립트 실행.

또는 패키지 action: 명령 실행에 appleboy/ssh-action, 파일 sync 에 burnett01/rsync-deployments.

SSH 키 위생

  • CI 전용 새 키 생성 — 개인 키 재사용 금지.
  • 타겟의 authorized_keys 항목을 command="...", from="github-runner-ip-range", 또는 둘 다 로 제한.
  • 분기 rotation.
  • MITM 방지 위해 CI 에서 ~/.ssh/known_hosts 에 호스트 추가.

Code

Secret 의 SSH 키로 rsync deploy·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 deploy 있으면 deploy 전용 키 생성, 타겟에서 command= 로 제한, workflow 가 그걸 쓰도록 마이그레이션.

Progress

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

댓글 0

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

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