92 lines
2.4 KiB
YAML
92 lines
2.4 KiB
YAML
|
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-host-content:
|
||
|
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
|
||
|
apt-get update
|
||
|
apt-get install -y rsync
|
||
|
fi
|
||
|
shell: bash
|
||
|
|
||
|
- name: Create SSH directory
|
||
|
run: |
|
||
|
mkdir -p ~/.ssh
|
||
|
shell: bash
|
||
|
|
||
|
- name: Install SSH config
|
||
|
run: |
|
||
|
echo <<EOF > ~/.ssh/config
|
||
|
Host targethost
|
||
|
User ${{ inputs.username }}
|
||
|
HostName ${{ inputs.host }}
|
||
|
Port ${{ inputs.port }}
|
||
|
ForwardAgent no
|
||
|
ForwardX11 no
|
||
|
PasswordAuthentication no
|
||
|
EOF
|
||
|
shell: bash
|
||
|
|
||
|
- name: Install SSH known_hosts
|
||
|
run: |
|
||
|
echo "${{ inputs.known-host-content }}" > ~/.ssh/known_hosts
|
||
|
echo " StrictHostKeyChecking yes" >> ~/.ssh/config
|
||
|
shell: bash
|
||
|
if: ${{ inputs.known-host-content != null }}
|
||
|
|
||
|
- name: Disable SSH host key checking
|
||
|
run: |
|
||
|
echo " StrictHostKeyChecking no" >> ~/.ssh/config
|
||
|
shell: bash
|
||
|
if: ${{ inputs.known-host-content == null }}
|
||
|
|
||
|
|
||
|
- name: Install SSH key
|
||
|
run: |
|
||
|
echo "${{ inputs.ssh-key }}" > ~/.ssh/id_rsa
|
||
|
chmod 600 ~/.ssh/id_rsa
|
||
|
shell: bash
|
||
|
if: ${{ inputs.ssh-key != null }}
|
||
|
|
||
|
- name: Transfer files
|
||
|
run: rsync ${{ inputs.args }} "${{ inputs.source }}" "targethost:${{ inputs.target }}"
|
||
|
shell: bash
|