#!/bin/sh # env # Written in 2021 by Lucas # CC0 1.0 Universal/Public domain - No rights reserved # # To the extent possible under law, the author(s) have dedicated all # copyright and related and neighboring rights to this software to the # public domain worldwide. This software is distributed without any # warranty. You should have received a copy of the CC0 Public Domain # Dedication along with this software. If not, see # . usage() { printf "Usage: %s [-c] [-l login_name] host backup-name\n" \ "${0##*/}" >&2 exit 1 } err() { printf "%s: %s\n" "${0##*/}" "$*" >&2 exit 1 } login_name=$(id -nu) agent_mode=yes while getopts cl: flag; do case $flag in c) agent_mode=confirm ;; l) login_name=$OPTARG ;; *) usage esac done shift $((OPTIND - 1)) if [ $# -ne 2 ] || [ -z "$1" ] || [ -z "$2" ]; then usage fi host=$1 backup_name=$2 [ -f "$host/bulist" ] || err "no bulist present in \"$h/\"" eval $(ssh-agent -s) trap 'eval $(ssh-agent -ks)' EXIT INT QUIT TERM set -e # Load correct key into ssh-agent. ssh -o AddKeysToAgent=$agent_mode "$login_name@$host" true cd "$host" tmpdir=$(ssh "$login_name@$host" mktemp -dt rbucmd.XXXXXX) sftp "$login_name@$host" <\"$tmpdir/bu.sh\"" </tmp/pkg-info.txt && doas xargs pax -wzf "$tmpdir/$backup_name.tgz" <"$tmpdir/bulist" && doas chown "$login_name:$login_name" "$tmpdir/$backup_name.tgz" EOF # -t is needed for doas to read a password. ssh -t "$login_name@$host" sh "$tmpdir/bu.sh" sftp -o "user=$login_name" "$host" <