From a7bef2e015a7676b40d3665b37c9945a029f1905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roger=20P=C3=A0mies?= Date: Wed, 1 Feb 2023 23:22:02 +0100 Subject: [PATCH] done remote_updater --- remote_updater.sh | 78 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 19 deletions(-) diff --git a/remote_updater.sh b/remote_updater.sh index 4c6c171..b30ef4f 100755 --- a/remote_updater.sh +++ b/remote_updater.sh @@ -1,4 +1,10 @@ -#!/bin/bash +#!/usr/bin/env bash + +# ============================================================================== +# DESCRIPTION +# +# +# ============================================================================== #verify run as root or sudo if [[ $EUID -ne 0 ]]; then @@ -8,6 +14,7 @@ fi readonly OFFSET_OPTIONS=3 declare -a TARGETS +NUM_HOSTS=0 show_ssh_hosts () { SSH_HOSTS_CONFIG_FILE="/root/.ssh/config" @@ -15,8 +22,8 @@ show_ssh_hosts () { if [ -f $SSH_HOSTS_CONFIG_FILE ]; then TARGETS=($(cat $SSH_HOSTS_CONFIG_FILE | grep -E "^Host [^\*\*]" | sed "s/Host //")) # get length of an array - length=${#TARGETS[@]} - for (( j=0; j&1) + if [ $? -eq 0 ]; then + echo "has_sudo__pass_set" + elif echo $prompt | grep -q '^sudo:'; then + echo "has_sudo__needs_pass" + else + echo "no_sudo" + fi +} + +elevate_cmd () { + local cmd=$@ + + HAS_SUDO=$(has_sudo) + + case "$HAS_SUDO" in + has_sudo__pass_set) + sudo $cmd + ;; + has_sudo__needs_pass) + echo "Please supply sudo password for the following command: sudo $cmd" + sudo $cmd + ;; + *) + echo "Please supply root password for the following command: su -c \"$cmd\"" + su -c "$cmd" + ;; + esac } remote_update () { - echo $1 ssh $1 << EOF -# date -# hostname -# cat /etc/resolv.conf - $(typeset -f is_root) - is_root + $(typeset -f has_sudo) + $(typeset -f elevate_cmd) + elevate_cmd apt update -qq + elevate_cmd apt upgrade -y + elevate_cmd apt autoremove EOF } @@ -63,7 +102,6 @@ echo "0) Sortir de l'script" echo "1) current host: $(hostname)" echo "2) custom host" show_ssh_hosts -#echo -e "\n" choosed=false while [ "$choosed" != "true" ] @@ -80,16 +118,18 @@ if [ "$HOST" = "0" ]; then finished=true exit 0 elif [ "$HOST" = "1" ]; then - echo -e "update now!\n" + apt update -qq + apt upgrade -y + apt autoremove elif [ "$HOST" = "2" ]; then read -p 'Indica el host remot: ' CUSTOM echo $CUSTOM -elif [ "$((HOST-OFFSET_OPTIONS))" -gt 7 ]; then - echo -e "Aquest número de host no existeix. Tornar a intentar-ho\n" -else - index=$((HOST-OFFSET_OPTIONS)) +elif [ "$((HOST-OFFSET_OPTIONS))" -lt $NUM_HOSTS ]; then + index=$((HOST-OFFSET_OPTIONS)) echo "${TARGETS[$index]}" remote_update "${TARGETS[$index]}" +else + echo -e "Aquest número de host no existeix. Tornar a intentar-ho\n" fi done