2025/02/28

如何在 GitHub Actions 中使用 SSH 連接遠端伺服器

再Repo的secrets加入SSH_PRIVATE_KEY / SSH_HOST / SSH_USER即可

name: 透過 SSH 部屬

on:
  workflow_dispatch:

jobs:
  deploy:
    runs-on: [self-hosted, Ubuntu, 24.04]

    steps:
      - name: 設定 SSH 金鑰(確保 `/var/ssh/` 存在)
        run: |
          if [ ! -d /var/ssh ]; then
            echo "🔍 /var/ssh 目錄不存在,正在建立..."
            sudo mkdir -p /var/ssh
            sudo chmod 700 /var/ssh
          else
            echo "✅ /var/ssh 目錄已存在,跳過建立"
          fi

          if [ ! -f /var/ssh/id_rsa ]; then
            echo "🔑 匯入 SSH 私鑰..."
            echo "${{ secrets.SSH_PRIVATE_KEY }}" | sudo tee /var/ssh/id_rsa > /dev/null
            sudo chmod 600 /var/ssh/id_rsa
          else
            echo "✅ SSH 私鑰已存在,跳過匯入"
          fi

          ssh-keyscan -H ${{ secrets.SSH_HOST }} | sudo tee -a /etc/ssh/ssh_known_hosts > /dev/null

      - name: 透過 SSH 部署 到 伺服器
        run: |
          sudo ssh -i /var/ssh/id_rsa ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
            echo "✅ 部署完成!"
          EOF