Site Tools


backup_script

This is an old revision of the document!


Backup Script

Goals


  1. You want to schedule a backup done via a cron job.
  2. You want the script initiated from, and stored in a safe location
    on a server on the network, (not on the router).
  3. You do not wish to install SFTP just for these backups.

The script in the code window on this page will download the script without needing to have SFTP enabled on the router.


One option would be to create the backup as a cron job on the router itself. However, let's assume you want everything done in just one run. For this reason, creation of the backup in an individual file with timestamp was included in the script.

In this way, just one run of the script on the backup server would create the backup and download it to to a safe location.

Action is based on using a here doc to execute commands on the router.

The backup is created using the “nvram save” command. This is how backups are done in the web interface. You may cross-check (what? at the command line?) by using “nvram convert” command.

The script then archives the resulting data in a tar file and sends it through the netcat command, which transfers it over the network.


Prerequisites:


  1. The netcat command must be available on the backup server.
  2. The router's root user must have access to the SSH key of the user executing the script on backup server.


 #!/bin/bash
 
 USER=root
 LOCAL_ID_FILE=/home/${LOGNAME}/.ssh/id_tomato_ecdsa
 PORT=5555
 BACKUP_DIR=/home/${LOGNAME}/Router_Backups
 SCRIPT_FILE=nvram_save_cfg.sh
 PREFIX=FreshTomato
 EXT=.cfg
 TRANSFER_FILENAME=config.tar
 
 ROUTER=`ip r | grep default | head -1 | cut -d " " -f 3`
 pushd ${BACKUP_DIR}
 
 (netcat -l -p ${PORT} > ${TRANSFER_FILENAME}) &
 #
 # Thinks like
 # VAR=`nvram get os_version`
 # seem not to work in bash via here doc, so write results into script file and source it
 # Further the individual filename is general not known, so tar it into temp file
 #
 ssh ${USER}@${ROUTER} -i ${LOCAL_ID_FILE}<<ENDSSH
         rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_20[234][0-9][01][0-9][0123][0-9]_[012][0-9][0-5][0-9]${EXT}
         echo "nvram save ${PREFIX}" >> ${SCRIPT_FILE}
         nvram get os_version | sed -e "s/ .*$//" >> ${SCRIPT_FILE}
         echo "on" >> ${SCRIPT_FILE}
         nvram get t_model_name | tr " " "_" >> ${SCRIPT_FILE}
         nvram get router_name >> ${SCRIPT_FILE}
         date +%Y%m%d_%H%M >> ${SCRIPT_FILE}
         sed -e "N;N;N;N;N;s/\n/_/g;s/$/${EXT}/" -i ${SCRIPT_FILE}
         cat ${SCRIPT_FILE}
         source ${SCRIPT_FILE}
         tar -cvf ${TRANSFER_FILENAME} *_20[234][0-9][01][0-9][0123][0-9]_[012][0-9][0-5][0-9]${EXT}
         cat ${TRANSFER_FILENAME} | nc caisfiles ${PORT}
         rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_20[234][0-9][01][0-9][0123][0-9]_[012][0-9][0-5][0-9]${EXT}
 ENDSSH
 
 tar -xvf ${TRANSFER_FILENAME}
 rm ${TRANSFER_FILENAME}
 popd



backup_script.1745518244.txt.gz · Last modified: 2025/04/24 19:10 by hogwild