handlers/borg: add port support

This enables the handlers to be used for hosts which use a non-standard
port, such as is offered by some commercial services. Default to port
22, so it's optional and backwards-compatible.
This commit is contained in:
tiredpixel 2020-07-16 08:37:28 +00:00
parent f9529d1d3f
commit 3d7494bfc2
2 changed files with 18 additions and 13 deletions

View File

@ -79,11 +79,12 @@ do_borg_dest() {
set -o noglob
REPLY=
while [ -z "$REPLY" -o -z "$borg_directory" -o -z "$borg_host" -o -z "$borg_user" -o -z "$borg_archive" -o -z "$borg_compression" ]
while [ -z "$REPLY" -o -z "$borg_directory" -o -z "$borg_host" -o -z "$borg_port" -o -z "$borg_user" -o -z "$borg_archive" -o -z "$borg_compression" ]
do
formBegin "$borg_title - destination"
formItem "directory" "$borg_directory"
formItem "host" "$borg_host"
formItem "port" "$borg_port"
formItem "user" "$borg_user"
formItem "archive_name" "$borg_archive"
formItem "compression" "$borg_compression"
@ -93,9 +94,10 @@ do_borg_dest() {
tmp_array=($REPLY)
borg_directory=${tmp_array[0]}
borg_host=${tmp_array[1]}
borg_user=${tmp_array[2]}
borg_archive=${tmp_array[3]}
borg_compression=${tmp_array[4]}
borg_port=${tmp_array[2]}
borg_user=${tmp_array[3]}
borg_archive=${tmp_array[4]}
borg_compression=${tmp_array[5]}
done
set +o noglob
@ -179,13 +181,13 @@ do_borg_ssh_con() {
read
fi
ssh -o PreferredAuthentications=publickey $borg_host -l $borg_user "exit" 2> /dev/null
ssh -o PreferredAuthentications=publickey $borg_host -p $borg_port -l $borg_user "exit" 2> /dev/null
if [ $? -ne 0 ]; then
echo "Copying root's public ssh key to authorized_keys of $borg_user@$borg_host. When prompted, specify the password for user $borg_user@$borg_host."
pubkeys=( /root/.ssh/id_[rd]sa.pub )
if ! ssh-copy-id -i ${pubkeys[0]} $borg_user@$borg_host; then
if ! ssh-copy-id -i ${pubkeys[0]} -p $borg_port $borg_user@$borg_host; then
echo "FAILED: Couldn't copy root's public ssh key to authorized_keys of $borg_user@$borg_host."
ssh $borg_user@$borg_host 'test -w .ssh || test -w .'
ssh -p $borg_port $borg_user@$borg_host 'test -w .ssh || test -w .'
result=$?
echo "Hit return to continue."
read
@ -208,9 +210,9 @@ do_borg_ssh_con() {
# test to see if the remote borg backup directory exists and is writable
echo "Testing to see if remote borg backup directory exists and is writable"
ssh $borg_user@$borg_host "test -d ${borg_directory}"
ssh -p $borg_port $borg_user@$borg_host "test -d ${borg_directory}"
if [ $? = 0 ]; then
ssh $borg_user@$borg_host "test -w $borg_directory"
ssh -p $borg_port $borg_user@$borg_host "test -w $borg_directory"
if [ $? != 0 ]; then
msgBox "destination directory is not writable!" "The remote destination directory is not writable by the user you specified. Please fix the permissions on the directory and then try again."
remote_status=failed
@ -218,7 +220,7 @@ do_borg_ssh_con() {
else
booleanBox "Remote directory does not exist" "The destination backup directory does not exist, do you want me to create it for you?"
if [ $? = 0 ]; then
ssh $borg_user@$borg_host "mkdir -p ${borg_directory}"
ssh -p $borg_port $borg_user@$borg_host "mkdir -p ${borg_directory}"
result=$?
case $result in
0) msgBox "$borg_title: success" "Creation of the remote destination directory was a success!";;
@ -316,6 +318,7 @@ keep = "${borg_keep}d"
[dest]
directory = $borg_directory
host = $borg_host
port = $borg_port
user = $borg_user
archive = $borg_archive
compression = $borg_compression
@ -373,6 +376,7 @@ borg_wizard() {
borg_directory=/backup/`hostname`
borg_user=root
borg_host=localhost
borg_port=22
borg_archive='{now:%Y-%m-%dT%H:%M:%S}'
borg_compression=lz4
borg_encryption=none

View File

@ -35,6 +35,7 @@ getconf prune_options
setsection dest
getconf user
getconf host
getconf port 22
getconf directory
# strip trailing /
directory=${directory%/}
@ -50,7 +51,7 @@ export BORG_PASSPHRASE="$passphrase"
# destination specific checks
[ "$directory" != "" ] || fatal "Destination directory not set"
if [ "$host" != "localhost" ]; then
execstr_repository="ssh://${user}@${host}${directory}"
execstr_repository="ssh://${user}@${host}:${port}${directory}"
else
execstr_repository="$directory"
fi
@ -59,8 +60,8 @@ execstr_archive="$archive"
# check the connection at the source and destination
[ -n "$test" ] || test=0
if [ "$host" != "localhost" ] && ([ "$testconnect" = "yes" ] || [ "${test}" -eq 1 ]); then
debug "ssh -o PasswordAuthentication=no $host -l $user 'echo -n 1'"
local ret=`ssh -o PasswordAuthentication=no $host -l $user 'echo -n 1'`
debug "ssh -o PasswordAuthentication=no $host -p $port -l $user 'echo -n 1'"
local ret=`ssh -o PasswordAuthentication=no $host -p $port -l $user 'echo -n 1'`
if [ "$ret" = 1 ]; then
debug "Connected to $host as $user successfully"
else