name: 'Rsync SSH transfer' description: 'Transfer files to another location' inputs: username: description: "Username to be used for login" required: true ssh-key: description: "private SSH key to use for logging int" required: false host: description: "Host to log in at" required: true port: description: "Port to connect to" required: true default: "22" known-hosts: description: "Content to add to the known_hosts file, to verify the authenticity of the remote" required: false source: description: "Which files to copy" required: true target: description: "Where on the host to copy the files" required: true args: description: "Command line args to pass to rsync" required: true default: "--archive --compress --verbose --mkpath" runs: using: "composite" steps: - name: Install rsync run: | if ! command -v apt-get &> /dev/null then echo "Only apt is supported" exit 1 fi if command -v rsync &> /dev/null then echo "rsync is already installed" else echo "Updating package index" apt-get update echo "Installing rsync" apt-get install -y rsync fi shell: bash - name: Create SSH directory run: | echo "Creating ~/.ssh" mkdir -p ~/.ssh shell: bash - name: Install SSH config run: | echo "Installing SSH config" cat < ~/.ssh/config Host targethost User ${{ inputs.username }} HostName ${{ inputs.host }} Port ${{ inputs.port }} IdentityFile ~/.ssh/key ForwardAgent no ForwardX11 no PasswordAuthentication no EOF chmod 600 ~/.ssh/config shell: bash - name: Install SSH known_hosts run: | echo "Installing known_hosts" echo "${{ inputs.known-hosts }}" > ~/.ssh/known_hosts echo " StrictHostKeyChecking yes" >> ~/.ssh/config shell: bash if: ${{ inputs.known-hosts != null }} - name: Disable SSH host key checking run: | echo "Disabling host key checking" echo " StrictHostKeyChecking no" >> ~/.ssh/config shell: bash if: ${{ inputs.known-hosts == null }} - name: Install SSH key run: | echo "Installing SSH key" echo "${{ inputs.ssh-key }}" > ~/.ssh/key chmod 600 ~/.ssh/key shell: bash if: ${{ inputs.ssh-key != null }} - name: Transfer files run: | echo "Transferring files" rsync ${{ inputs.args }} "${{ inputs.source }}" "targethost:${{ inputs.target }}" shell: bash - name: Cleanup run: | echo "Cleaning up" rm -f ~/.ssh/{config,key,known_hosts} || true shell: bash