name: SSH copy description: copy files to SSH hosts inputs: host: description: SSH host required: true user: description: SSH user required: true key: description: SSH private key required: true source: description: directory to copy required: true target: description: destination path on remote required: true port: description: SSH port required: false default: "22" runs: using: "composite" steps: - name: setup ssh shell: bash env: SSH_KEY: ${{ inputs.key }} HOST: ${{ inputs.host }} PORT: ${{ inputs.port }} run: | set -euo pipefail mkdir -p ~/.ssh printf '%s\n' "$SSH_KEY" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 ssh-keyscan -p "$PORT" -H "$HOST" >> ~/.ssh/known_hosts chmod 600 ~/.ssh/known_hosts - name: rsync directory shell: bash env: SRC: ${{ inputs.source }} HOST: ${{ inputs.host }} USER: ${{ inputs.user }} TARGET: ${{ inputs.target }} PORT: ${{ inputs.port }} run: | set -euo pipefail rsync -rlptz --delete -e "ssh -p $PORT" "$SRC" "$USER@$HOST:$TARGET"