bacoid/bacoid.sh

57 lines
2.4 KiB
Bash
Raw Permalink Normal View History

2023-05-01 18:46:00 +00:00
#!/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