57 lines
2.4 KiB
Bash
57 lines
2.4 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
subvolArray=($(zfs get syncoid:pool_a -H -o name,value | grep -v '@' | awk '{if($2 != "-" && $2 != "") print $1}'))
|
||
|
|
||
|
COUNT=1
|
||
|
for subvol in ${subvolArray[@]}; do
|
||
|
targetArray[$COUNT]="$(zfs get syncoid:target_a ${subvol} | grep -v 'NAME' | awk '{print $3}')"
|
||
|
COUNT=$(( ${COUNT} + 1 ))
|
||
|
done
|
||
|
targetArray=($(printf '%s\n' ${targetArray[@]} | awk '!a[$0]++'))
|
||
|
|
||
|
|
||
|
for target in ${targetArray[@]}; do
|
||
|
[[ ${target} != *@* ]] && continue
|
||
|
echo "Testing SSH connection to ${target}"
|
||
|
USERHOST="$(sed 's|:.*||' <<< ${target})"
|
||
|
HOST="$(sed 's|.*@||' <<< ${USERHOST})"
|
||
|
USER="$(sed 's|@.*||' <<< ${USERHOST})"
|
||
|
PORT="$(sed 's|.*:||' <<< ${target})"
|
||
|
if [[ ! -f "${HOME}/.ssh/bkp_rsa" ]]; then
|
||
|
echo "Generating bkp_rsa key"
|
||
|
ssh-keygen -N "" -f "${HOME}/.ssh/bkp_rsa"
|
||
|
fi
|
||
|
|
||
|
ssh -i "${HOME}/.ssh/bkp_rsa" \
|
||
|
-p ${PORT} \
|
||
|
-o ControlPath=none \
|
||
|
-o LogLevel=INFO \
|
||
|
-o PreferredAuthentications=publickey \
|
||
|
-o IdentitiesOnly=yes ${USERHOST} exit
|
||
|
[[ $? -ne 0 ]] && ssh-copy-id -p ${PORT} -i "${HOME}/.ssh/bkp_rsa" ${USERHOST}
|
||
|
done
|
||
|
|
||
|
|
||
|
for subvol in ${subvolArray[@]}; do
|
||
|
TARGET="$(zfs get syncoid:target_a ${subvol} | grep -v NAME | awk '{print $3}')"
|
||
|
if [[ ${target} != "-" ]]; then
|
||
|
USERHOST="$(sed 's|:.*||' <<< ${TARGET})"
|
||
|
HOST="$(sed 's|.*@||' <<< ${USERHOST})"
|
||
|
USER="$(sed 's|@.*||' <<< ${USERHOST})"
|
||
|
PORT="$(sed 's|.*:||' <<< ${TARGET})"
|
||
|
MACHINE="$(zfs get syncoid:machine ${subvol} | grep -v NAME | awk '{print $3}')"
|
||
|
[[ ${MACHINE} == '-' ]] && { echo "syncoid:machine not set for ${subvol}"; continue; }
|
||
|
POOL="$(zfs get syncoid:pool_a ${subvol} | grep -v NAME | awk '{print $3}')"
|
||
|
[[ ${POOL} == '-' ]] && { echo "syncoid:pool_a not set for ${subvol}"; continue; }
|
||
|
echo "Sending ${subvol} to ${USERHOST}:${POOL}/$USER/$MACHINE/$subvol"
|
||
|
syncoid --sendoptions="w" --recvoptions="u" --sshport=${PORT} --sshkey="${HOME}/.ssh/bkp_rsa" --no-sync-snap --no-privilege-elevation ${subvol} ${USERHOST}:${POOL}/${USER}/${MACHINE}/${subvol}
|
||
|
else
|
||
|
MACHINE="$(zfs get syncoid:machine ${subvol} | grep -v NAME | awk '{print $3}')"
|
||
|
[[ ${MACHINE} == '-' ]] && { echo "syncoid:machine not set for ${subvol}"; continue; }
|
||
|
POOL="$(zfs get syncoid:pool_a ${subvol} | grep -v NAME | awk '{print $3}')"
|
||
|
[[ ${POOL} == '-' ]] && { echo "syncoid:pool_a not set for ${subvol}"; continue; }
|
||
|
echo "Sending ${subvol} to ${POOL}/$MACHINE/$subvol"
|
||
|
syncoid --sendoptions="w" --recvoptions="u" --no-sync-snap ${subvol} ${POOL}/${MACHINE}/${subvol}
|
||
|
fi
|
||
|
done
|