diff --git a/home.admin/_bootstrap.sh b/home.admin/_bootstrap.sh index 0f63b4798..349dd24d5 100755 --- a/home.admin/_bootstrap.sh +++ b/home.admin/_bootstrap.sh @@ -265,12 +265,12 @@ fi # if backup is available on HDD/SSD ################################ -if [ -d "/var/cache/raspiblitz/hdd-inspect/ssh" ]; then +if [ -d "/var/cache/raspiblitz/hdd-inspect/sshd" ]; then # INIT OLD SSH HOST KEYS on Update/Recovery to prevent "Unknown Host" on ssh client echo "SSH SERVER CERTS RESTORE activating old SSH host keys" >> $logFile /home/admin/config.scripts/blitz.ssh.sh restore /var/cache/raspiblitz/hdd-inspect >> $logFile else - echo "No SSH SERVER CERTS RESTORE because no /var/cache/raspiblitz/hdd-inspect/ssh" >> $logFile + echo "No SSH SERVER CERTS RESTORE because no /var/cache/raspiblitz/hdd-inspect" >> $logFile fi ################################ diff --git a/home.admin/config.scripts/blitz.datadrive.sh b/home.admin/config.scripts/blitz.datadrive.sh index 53934f1d4..cbf08ac5b 100755 --- a/home.admin/config.scripts/blitz.datadrive.sh +++ b/home.admin/config.scripts/blitz.datadrive.sh @@ -239,9 +239,21 @@ if [ "$1" = "status" ]; then # make copy of WIFI config to RAMDISK (if available) cp /mnt/hdd${subVolumeDir}/app-data/wpa_supplicant.conf /var/cache/raspiblitz/hdd-inspect/wpa_supplicant.conf 2>/dev/null - # make copy of SSH keys to RAMDISK (if available) - cp -r /mnt/hdd${subVolumeDir}/ssh /var/cache/raspiblitz/hdd-inspect/ssh 2>/dev/null + # Convert old ssh backup data structure (if needed) + if [ -d "/mnt/hdd/ssh" ]; then + # make a complete backup of directory + cp -a /mnt/hdd/ssh /mnt/hdd/app-storage/ssh-old-bakup + # delete old false sub directory (if exists) + rm -r /mnt/hdd/ssh/ssh 2>/dev/null + # move ssh root keys into new directory (if exists) + mv /mnt/hdd/ssh/root_backup /mnt/hdd/app-data/ssh-root 2>/dev/null + # move sshd keys into new directory + mv /mnt/hdd/ssh /mnt/hdd/app-data/sshd + fi + # make copy of SSH keys to RAMDISK (if available) + cp -r /mnt/hdd${subVolumeDir}/app-data/sshd /var/cache/raspiblitz/hdd-inspect/sshd 2>/dev/null + cp -r /mnt/hdd${subVolumeDir}/app-data/ssh-root /var/cache/raspiblitz/hdd-inspect/ssh-root 2>/dev/null fi # comment this line out if case to study the contect of the data section diff --git a/home.admin/config.scripts/blitz.ssh.sh b/home.admin/config.scripts/blitz.ssh.sh index 29b629270..f6de97da0 100755 --- a/home.admin/config.scripts/blitz.ssh.sh +++ b/home.admin/config.scripts/blitz.ssh.sh @@ -12,8 +12,6 @@ if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; exit 1 fi -DEFAULTBACKUPBASEDIR="/mnt/hdd" # compiles to /mnt/hdd/ssh - # check if started with sudo if [ "$EUID" -ne 0 ]; then echo "error='missing sudo'" @@ -24,7 +22,7 @@ fi # RENEW ################### if [ "$1" = "renew" ]; then - echo "# *** blitz.ssh.sh renew" + echo "# *** $0 $1" sudo systemctl stop sshd sudo rm /etc/ssh/ssh_host_* sudo ssh-keygen -A @@ -37,7 +35,7 @@ fi # CLEAR ################### if [ "$1" = "clear" ]; then - echo "# *** blitz.ssh.sh clear" + echo "# *** $0 $1" sudo rm /etc/ssh/ssh_host_* echo "# OK: SSHD keyfiles & possible backups deleted" exit 0 @@ -47,7 +45,7 @@ fi # SESSIONS ################### if [ "$1" = "sessions" ]; then - echo "# *** blitz.ssh.sh sessions" + echo "# *** $0 $1" sessionsCount=$(ss | grep -c ":ssh") echo "ssh_session_count=${sessionsCount}" exit 0 @@ -57,7 +55,7 @@ fi # CHECK & REPAIR ################### if [ "$1" = "checkrepair" ]; then - echo "# *** blitz.ssh.sh checkrepair" + echo "# *** $0 $1" # check if sshd host keys are missing / need generation countKeyFiles=$(ls -la /etc/ssh/ssh_host_* 2>/dev/null | grep -c "/etc/ssh/ssh_host") @@ -100,22 +98,26 @@ if [ "$1" = "checkrepair" ]; then exit 0 fi +DEFAULT_BASEDIR="/mnt/hdd/app-data" + ################### # BACKUP ################### if [ "$1" = "backup" ]; then - echo "# *** blitz.ssh.sh backup" - echo "# backup dir: ${DEFAULTBACKUPBASEDIR}/ssh" + echo "# *** $0 $1" + echo "# backup dir: ${DEFAULT_BASEDIR}" # backup sshd host keys - sudo rm -r $DEFAULTBACKUPBASEDIR/ssh 2>/dev/null # delete backups if exist - sudo cp -r /etc/ssh $DEFAULTBACKUPBASEDIR/ssh 2>/dev/null # copy to backups if exist + mkdir -p $DEFAULT_BASEDIR/sshd + sudo rm -rf $DEFAULT_BASEDIR/sshd/* + sudo cp -a /etc/ssh $DEFAULT_BASEDIR/sshd # backup root use ssh keys - sudo rm -r $DEFAULTBACKUPBASEDIR/ssh/root_backup 2>/dev/null - sudo cp -r /root/.ssh $DEFAULTBACKUPBASEDIR/ssh/root_backup 2>/dev/null + mkdir -p $DEFAULT_BASEDIR/ssh-root + sudo rm -rf $DEFAULT_BASEDIR/ssh-root/* + sudo cp -a /root/.ssh $DEFAULT_BASEDIR/ssh-root - if [ -d "${DEFAULTBACKUPBASEDIR}/ssh" ]; then + if [ -d "${DEFAULT_BASEDIR}/sshd" ] && [ -d "${DEFAULT_BASEDIR}/ssh-root" ]; then echo "# OK - ssh keys backup done" else echo "error='ssh keys backup failed - backup location may not exist'" @@ -127,33 +129,40 @@ fi # RESTORE ################### if [ "$1" = "restore" ]; then - echo "# *** blitz.ssh.sh restore" - - # second parameter (optional) - ALTBACKUPBASEDIR=$2 - if [ "${ALTBACKUPBASEDIR}" != "" ]; then - DEFAULTBACKUPBASEDIR="${ALTBACKUPBASEDIR}" + echo "# *** $0 $1" + ALT_BASEDIR=$2 + if [ "${ALT_BASEDIR}" != "" ]; then + DEFAULT_BASEDIR="${ALT_BASEDIR}" fi - echo "# backup dir: ${DEFAULTBACKUPBASEDIR}/ssh" - if [ -d "${DEFAULTBACKUPBASEDIR}/ssh" ]; then + echo "# backup dir: ${DEFAULT_BASEDIR}" + if [ -d "${DEFAULT_BASEDIR}/sshd" ]; then # restore sshd host keys - sudo rm -r /etc/ssh/* - sudo cp -r $DEFAULTBACKUPBASEDIR/ssh/* /etc/ssh/ + sudo rm -rf /etc/ssh/* + sudo cp -a $DEFAULT_BASEDIR/sshd/* /etc/ssh/ sudo chown -R root:root /etc/ssh sudo dpkg-reconfigure openssh-server sudo systemctl restart sshd - - # restore root use keys - sudo rm -r /root/.ssh 2>/dev/null - sudo cp -r $DEFAULTBACKUPBASEDIR/ssh/root_backup /root/.ssh 2>/dev/null - sudo chown -R root:root /root/.ssh 2>/dev/null - - echo "# OK - ssh keys restore done" + echo "# OK - sshd keys restore done" else - echo "error='ssh keys backup not found'" + echo "error='sshd keys backup not found'" + exit 1 fi + + if [ -d "${DEFAULT_BASEDIR}/ssh-root" ]; then + + # restore root use keys (directory may not exist) + sudo rm -rf /root/.ssh + sudo mkdir /root/.ssh + sudo cp -a $DEFAULT_BASEDIR/ssh-root/* /root/.ssh + sudo chown -R root:root /root/.ssh + + echo "# OK - ssh-root keys restore done" + else + echo "# INFO - ssh-root keys backup not available" + fi + exit 0 fi