introduce blitz.ssh.sh

This commit is contained in:
rootzoll 2021-08-20 12:27:07 +02:00
parent aefa359115
commit 0b68c6694f
5 changed files with 142 additions and 41 deletions

View File

@ -94,10 +94,8 @@ sudo chmod 777 ${infoFile}
######################################
# CHECK SD CARD INCONSISTENT STATE
# make sure SSH server certs are configured & sshd is running
sudo systemctl stop sshd
sudo dpkg-reconfigure openssh-server
sudo systemctl start sshd
# make sure SSH server is configured & running
sudo /home/admin/config.scripts/blitz.ssh.sh checkrepair
# when the provision did not ran thru without error (ask user for fresh sd card)
provisionFlagExists=$(sudo ls /home/admin/provision.flag | grep -c 'provision.flag')
@ -175,10 +173,7 @@ if [ ${sshReset} -eq 1 ]; then
sudo rm /boot/ssh.reset* >> $logFile
# delete ssh certs
echo "SSHRESET switch found ... stopping SSH and deleting old certs" >> $logFile
sudo systemctl stop sshd >> $logFile
sudo rm /etc/ssh/ssh_host_*
sudo rm /mnt/hdd/ssh/ssh_host* >> $logFile
sudo ssh-keygen -A >> $logFile
sudo /home/admin/config.scripts/blitz.ssh.sh renew
systemInitReboot=1
sed -i "s/^message=.*/message='SSHRESET'/g" ${infoFile}
else
@ -409,9 +404,7 @@ if [ ${isMounted} -eq 0 ]; then
# INIT OLD SSH HOST KEYS on Update/Recovery to prevent "Unknown Host" on ssh client
echo "COPY und Activating old SSH host keys" >> $logFile
sudo cp -r /mnt/hdd/ssh/* /etc/ssh/ >> ${logFile} 2>&1
sudo systemctl restart sshd
sudo dpkg-reconfigure openssh-server
sudo /home/admin/config.scripts/blitz.ssh.sh restore
# determine if this is a recovery or an update
# TODO: improve version/update detetion later

View File

@ -32,10 +32,7 @@ sudo sed -i "s/^message=.*/message='Provision Setup'/g" ${infoFile}
sudo sed -i "s/^message=.*/message='SSH Keys'/g" ${infoFile}
# link ssh directory from SD card to HDD
echo "# --> SSH key settings" >> ${logFile}
echo "# copying SSH pub keys to HDD" >> ${logFile}
sudo cp -r /etc/ssh /mnt/hdd/ssh >> ${logFile}
echo "# OK" >> ${logFile}
sudo /home/admin/config.scripts/blitz.ssh.sh backup
###################################
# Prepare Blockchain Service

View File

@ -111,20 +111,8 @@ sudo usermod -a -G debian-tor bitcoin
echo "Setting lightning alias: ${hostname}" >> ${logFile}
sudo sed -i "s/^alias=.*/alias=${hostname}/g" /home/admin/assets/lnd.${network}.conf >> ${logFile} 2>&1
# link old SSH PubKeys
# so that client ssh_known_hosts is not complaining after update
if [ -d "/mnt/hdd/ssh" ]; then
echo "Old SSH PubKey exists on HDD > copy them HDD to SD card for next start" >> ${logFile}
sudo cp -r /mnt/hdd/ssh/* /etc/ssh/ >> ${logFile} 2>&1
else
echo "No SSH PubKey exists on HDD > copy from SD card to HDD as backup" >> ${logFile}
sudo cp -r /etc/ssh /mnt/hdd/ssh >> ${logFile} 2>&1
fi
# just copy - dont link anymore so that sshd will also start without HDD connected
# see: https://github.com/rootzoll/raspiblitz/issues/1798
#sudo rm -rf /etc/ssh >> ${logFile} 2>&1
#sudo ln -s /mnt/hdd/ssh /etc/ssh >> ${logFile} 2>&1
#sudo /home/admin/config.scripts/blitz.systemd.sh update-sshd >> ${logFile} 2>&1
# backup SSH PubKeys
sudo /home/admin/config.scripts/blitz.ssh.sh backup
# optimze mempool if RAM >1GB
kbSizeRAM=$(cat /proc/meminfo | grep "MemTotal" | sed 's/[^0-9]*//g')
@ -461,17 +449,6 @@ else
echo "Provisioning chantools - keep default" >> ${logFile}
fi
# ROOT SSH KEYS
# check if a backup on HDD exists  if so, restore it
backupRootSSH=$(sudo ls /mnt/hdd/ssh/root_backup 2>/dev/null | grep -c "id_rsa")
if [ ${backupRootSSH} -gt 0 ]; then
echo "Provisioning Root SSH Keys - RESTORING from HDD" >> ${logFile}
sudo cp -r /mnt/hdd/ssh/root_backup /root/.ssh
sudo chown -R root:root /root/.ssh
else
echo "Provisioning Root SSH Keys - keep default" >> ${logFile}
fi
# SSH TUNNEL
if [ "${#sshtunnel}" -gt 0 ]; then
echo "Provisioning SSH Tunnel - run config script" >> ${logFile}

View File

@ -0,0 +1,134 @@
#!/usr/bin/env bash
# command info
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-help" ]; then
echo "RaspiBlitz SSH tools"
echo "blitz.ssh.sh renew --> renew the sshd host certs"
echo "blitz.ssh.sh clear --> make sure old sshd host certs are cleared"
echo "blitz.ssh.sh checkrepair --> check sshd & repair just in case"
echo "blitz.ssh.sh backup --> copy ssh keys to backup (if exist)"
echo "blitz.ssh.sh restore --> restore ssh keys from backup (if exist)"
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'"
exit 1
fi
###################
# RENEW
###################
if [ "$1" = "renew" ]; then
echo "# *** blitz.ssh.sh renew"
sudo systemctl stop sshd
sudo rm /etc/ssh/ssh_host_*
sudo ssh-keygen -A
sudo dpkg-reconfigure openssh-server
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
sudo systemctl start sshd
exit 0
fi
###################
# CLEAR
###################
if [ "$1" = "clear" ]; then
echo "# *** blitz.ssh.sh clear"
sudo rm /etc/ssh/ssh_host_*
sudo rm $DEFAULTBACKUPBASEDIR/ssh/ssh_host* 2>/dev/null
echo "# OK: SSHD keyfiles & possible backups deleted"
exit 0
fi
###################
# CHECK & REPAIR
###################
if [ "$1" = "checkrepair" ]; then
echo "# *** blitz.ssh.sh checkrepair"
# check if sshd host keys are missing / need generation
countKeyFiles=$(sudo ls -la /etc/ssh/ssh_host_* 2>/dev/null | grep -c "/etc/ssh/ssh_host")
echo "# countKeyFiles(${countKeyFiles})"
if [ ${countKeyFiles} -lt 8 ]; then
echo "# DETECTED: MISSING SSHD KEYFILES --> Generating new ones"
sudo systemctl stop sshd
sudo ssh-keygen -A
sudo systemctl start sshd
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
sleep 3
fi
# check if SSHD service is NOT running & active
sshdRunning=$(sudo systemctl status sshd | grep -c "active (running)")
if [ ${sshdRunning} -eq 0 ]; then
echo "# DETECTED: SSHD NOT RUNNING --> Try reconfigure & kickstart again"
sudo dpkg-reconfigure openssh-server
sudo systemctl restart sshd
sleep 3
fi
# check that SSHD service is running & active
sshdRunning=$(sudo systemctl status sshd | grep -c "active (running)")
if [ ${sshdRunning} -eq 1 ]; then
echo "# OK: SSHD RUNNING"
fi
exit 0
fi
###################
# BACKUP
###################
if [ "$1" = "backup" ]; then
echo "# *** blitz.ssh.sh backup"
echo "# backup dir: ${DEFAULTBACKUPBASEDIR}/ssh"
# 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
# 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
if [ -d "${DEFAULTBACKUPBASEDIR}/ssh" ]; then
echo "# OK - ssh keys backup done"
else
echo "error='ssh keys backup failed - backup location may not exist'"
fi
exit 0
fi
###################
# RESTORE
###################
if [ "$1" = "restore" ]; then
echo "# *** blitz.ssh.sh restore"
echo "# backup dir: ${DEFAULTBACKUPBASEDIR}/ssh"
if [ -d "${DEFAULTBACKUPBASEDIR}/ssh" ]; then
# restore sshd host keys
sudo cp -r $DEFAULTBACKUPBASEDIR/ssh/* /etc/ssh/
sudo chown -R root:root /etc/ssh
sudo dpkg-reconfigure openssh-server
sudo systemctl restart sshd
# restore root use keys
sudo cp -r $DEFAULTBACKUPBASEDIR/ssh/root_backup /root/.ssh
sudo chown -R root:root /root/.ssh
echo "# OK - ssh keys restore done"
else
echo "error='ssh keys backup not found'"
fi
exit 0
fi
echo "error='unknown parameter'"
exit 1

View File

@ -168,7 +168,7 @@ def on(restore_on_update=False):
# copy SSH keys for backup (for update with new sd card)
print("making backup copy of SSH keys")
subprocess.call("sudo cp -r /root/.ssh /mnt/hdd/ssh/root_backup", shell=True)
subprocess.call("sudo /home/admin/config.scripts/blitz.ssh.sh backup", shell=True)
print("DONE")
# write ssh tunnel data to raspiblitz config (for update with new sd card)