iNew option for using sudo/doas on remote server - drist - a remote deployment tool Err bitreich.org 70 hgit clone git://bitreich.org/drist/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/drist/ URL:git://bitreich.org/drist/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/drist/ bitreich.org 70 1Log /scm/drist/log.gph bitreich.org 70 1Files /scm/drist/files.gph bitreich.org 70 1Refs /scm/drist/refs.gph bitreich.org 70 1Tags /scm/drist/tag bitreich.org 70 1README /scm/drist/file/README.gph bitreich.org 70 1LICENSE /scm/drist/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit c9735fd7d912dbca6e03c2725456d4eeb6d9487b /scm/drist/commit/c9735fd7d912dbca6e03c2725456d4eeb6d9487b.gph bitreich.org 70 1parent 723d94faa06c4597f88ccfdcf7821154bf889138 /scm/drist/commit/723d94faa06c4597f88ccfdcf7821154bf889138.gph bitreich.org 70 hAuthor: Solene Rapenne URL:mailto:solene@perso.pw bitreich.org 70 iDate: Thu, 29 Nov 2018 08:20:10 +0100 Err bitreich.org 70 i Err bitreich.org 70 iNew option for using sudo/doas on remote server Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M drist | 46 +++++++++++++++++++++++++------ Err bitreich.org 70 i M drist.1 | 14 ++++++++++++-- Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 49 insertions(+), 11 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/drist b/drist /scm/drist/file/drist.gph bitreich.org 70 i@@ -1,8 +1,36 @@ Err bitreich.org 70 i #!/bin/sh Err bitreich.org 70 i Err bitreich.org 70 i+usage() { Err bitreich.org 70 i+ echo "$0 [-s [-e sudo|doas]] server" Err bitreich.org 70 i+ exit 0 Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+ Err bitreich.org 70 i+while getopts se: arg; do Err bitreich.org 70 i+ case ${arg} in Err bitreich.org 70 i+ s) SUDO=1 ;; Err bitreich.org 70 i+ e) SUDO_BIN="${OPTARG}" ;; Err bitreich.org 70 i+ *) usage ;; Err bitreich.org 70 i+ esac Err bitreich.org 70 i+done Err bitreich.org 70 i+shift $((OPTIND - 1)) Err bitreich.org 70 i+ Err bitreich.org 70 i+# allow to use a privilege escalation program Err bitreich.org 70 i+if [ "$SUDO" -eq 1 ] Err bitreich.org 70 i+then Err bitreich.org 70 i+ # defaulting to sudo Err bitreich.org 70 i+ if [ -z "$SUDO_BIN" ] Err bitreich.org 70 i+ then Err bitreich.org 70 i+ SUDO_BIN=sudo Err bitreich.org 70 i+ fi Err bitreich.org 70 i+ EXEC="$SUDO_BIN" Err bitreich.org 70 i+else Err bitreich.org 70 i+ EXEC="" Err bitreich.org 70 i+fi Err bitreich.org 70 i+ Err bitreich.org 70 i+# check if host exists Err bitreich.org 70 i if [ "$#" -ne 1 ]; then Err bitreich.org 70 i- echo "You should pass a server as a parameter" Err bitreich.org 70 i- exit 1 Err bitreich.org 70 i+ usage Err bitreich.org 70 i else Err bitreich.org 70 i HOSTNAME=$(ssh "$1" "uname -n") Err bitreich.org 70 i if [ "$?" -ne 0 ]; then Err bitreich.org 70 i@@ -22,7 +50,7 @@ copy_files() { Err bitreich.org 70 i then Err bitreich.org 70 i printf 'Copying files:\n' Err bitreich.org 70 i find "${1}"/ -type f | cut -d '/' -f 2- | tee "${LIST}" Err bitreich.org 70 i- rsync -lD --files-from="${LIST}" "${1}/" "${2}":/ Err bitreich.org 70 i+ rsync --rsync-path="${EXEC} rsync" -lD --files-from="${LIST}" "${1}/" "${2}":/ Err bitreich.org 70 i rm "$LIST" Err bitreich.org 70 i fi Err bitreich.org 70 i fi Err bitreich.org 70 i@@ -34,11 +62,11 @@ remote_script() { Err bitreich.org 70 i if [ -f "${1}" ] Err bitreich.org 70 i then Err bitreich.org 70 i printf 'Executing script\n' Err bitreich.org 70 i- ssh "${2}" 'DRIST=$(mktemp /tmp/drist.XXXXXXXXXXXX) && Err bitreich.org 70 i- cat - > "$DRIST" && Err bitreich.org 70 i- chmod u+x "$DRIST" && Err bitreich.org 70 i- "$DRIST" ; Err bitreich.org 70 i- rm "$DRIST"' < "$1" Err bitreich.org 70 i+ ssh "${2}" "DRIST=$(mktemp /tmp/drist.XXXXXXXXXXXX) && Err bitreich.org 70 i+ cat - > \$DRIST && Err bitreich.org 70 i+ chmod u+x \$DRIST && Err bitreich.org 70 i+ ${EXEC} \$DRIST ; Err bitreich.org 70 i+ rm \$DRIST" < "$1" Err bitreich.org 70 i fi Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -54,7 +82,7 @@ delete_files() { Err bitreich.org 70 i printf 'Removing files:\n' Err bitreich.org 70 i find "$1" -type f | sed 's/"/\\&/' | \ Err bitreich.org 70 i awk -v path="${1}" '{ printf "\"%s\" ",substr($0,length(path)+1)}' > "${LIST}" Err bitreich.org 70 i- test -s "$LIST" && ssh "$2" "rm -v $(cat $LIST)" Err bitreich.org 70 i+ test -s "$LIST" && ssh "$2" "${EXEC} rm -v $(cat $LIST)" Err bitreich.org 70 i fi Err bitreich.org 70 i fi Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/drist.1 b/drist.1 /scm/drist/file/drist.1.gph bitreich.org 70 i@@ -6,7 +6,18 @@ Err bitreich.org 70 i .Nd dumb remote installer shell tool, a remote deployment tool Err bitreich.org 70 i .Sh SYNOPSIS Err bitreich.org 70 i .Nm Err bitreich.org 70 i+.Op Fl s Op Fl e Ar sudo|doas Err bitreich.org 70 i .Ar server Err bitreich.org 70 i+.Sh OPTIONS Err bitreich.org 70 i+.Op Fl s Err bitreich.org 70 i+use a program to execute a command as root on the remote server. Err bitreich.org 70 i+Default is sudo. Err bitreich.org 70 i+ Err bitreich.org 70 i+.Op Fl e Ar binary Err bitreich.org 70 i+binary to use for executing the commands as root. Err bitreich.org 70 i+This flag is only useful when used with Err bitreich.org 70 i+.Fl s . Err bitreich.org 70 i+ Err bitreich.org 70 i .Sh DESCRIPTION Err bitreich.org 70 i .Nm Err bitreich.org 70 i is a tool to configure remote servers using Err bitreich.org 70 i@@ -14,8 +25,7 @@ is a tool to configure remote servers using Err bitreich.org 70 i and Err bitreich.org 70 i .Xr rsync 1 . Err bitreich.org 70 i .Nm Err bitreich.org 70 i-has been designed to be simple, so it may not offer all the features Err bitreich.org 70 i-you want. Err bitreich.org 70 i+has been designed to be simple, so it may not offer all the features you want. Err bitreich.org 70 i .Pp Err bitreich.org 70 i When you run Err bitreich.org 70 i .Nm Err bitreich.org 70 .