108 lines
2.8 KiB
YAML
108 lines
2.8 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-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 <<EOF > ~/.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 |