Først og fremmest har jeg hentet inspiration i laoshi's guide om "Daglig backup af vigtige filer" https://ubuntudanmark.dk/forum/viewtopic.php?f=11&t=5881, hvori bliver man vejledt i brugen af rsync, samt hvordan man laver et script, der kan køres via terminalen eller ved dobbeltklik på filen.
For det andet har jeg læst Troy Johnsons indlæg på http://troy.jdmz.net/cron/, hvor man bliver vejledt i brugen af det indbyggede og meget stærke værktøj, "cron", hvormed man kan igangsætte kodelinier eller scripts på ethvert tænkeligt tidspunkt efter eget ønske.
For det tredie (og sidste) har jeg haft brug for værktøjet ssh-keygen, hvormed man får dannet certifikat-filer i stil med Digital Signatur, hvilket jeg bruger til automatisk at logge ind på en anden computer på det lokale netværk via ssh.
Men nu til sagen:
Backup script har jeg - med mine egne tilpasninger - blot brugt scriptet fra laoshi's guide https://ubuntudanmark.dk/forum/viewtopic.php?f=11&t=5881.
Dog har jeg slettet $HOME de steder, hvor denne variabel optræder, og erstattet det med "/home/migselv/", hvilket jeg har været nødt til fordi scriptet skal køres som root - og som root vil $HOME give et andet resultat end forventet. Grunden til at scriptet skal køres som root er, at man ellers får man ikke adgang til /etc/mapperne, men derimod blot får fejlmeldingen: "permission denied"
SSH-adgang til destinationen har været nødendig fordi jeg ville lægge sikkerhedskopien på min NAS-server, der er en lagerenhed med egen IP-adresse på det lokale netværk. For at få adgang til den, må man angive NAS-serverens adgangskode, hvilket altså skal gøres tre gange for at gennemføre det nævnte rsync-script. Og det er jo ik' smart!
Kommandoen ...
Kode: Vælg alt
ssh-keygen
De to nøglefiler udgør hhv. en privat nøgle (den første fil) og en offentlig nøgle (pub-filen). Den offentlige nøgle skal nu lægges ind i modtagerens (=NAS-serverens) "authorized_keys"-fil, hvilket gøres med kommandoen:
Kode: Vælg alt
cat id_rsa.pub >> authorized_keys2
De to >> angiver, at id_rsa.pub skal tilføjes til authorized_keys2.
Hvis man i stedet kun bruger en >, så bliver hele indholdet i authorized_keys2 erstattet/udfyldt med indholdet af id_rsa.pub
Historien her handler om, at man efterfølgende kan indlægge offentlige nøgler fra flere forskellige computere i serverens "authorized_keys"-fil.
Filen authorized_keys2 uploader jeg til NAS-serveren, hvor filen skal ligge i "den rigtige mappe", hvilket hos mig er: /etc/config/ssh
Idet jeg har placeret de to nøglefiler i mappen .ssh i min hjemmemappe, kan jeg nu teste adgangen via nøglefil med
Kode: Vælg alt
ssh -i ~/.ssh/id_rsa admin@192.168.10.4
Backup scriptet kan nu tilpasses en smule, idet ovenstående nøgle skal angives, således:
Kode: Vælg alt
rsync -e 'ssh -i /home/[migselv]/.ssh/id_rsa'
... samt destinationen ...:
admin@192.168.10.4:/share/backup/
I sin helhed ser mit backup-script nu således ud:
Kode: Vælg alt
#!/usr/local/bin/backup.sh
# Definitioner:
OPTS="-h -v --stats -C --update -z -a --exclude-from=/home/migselv/.ekskluder --delete-after "
DATO=`date '+%Y.%m.%d'`
LOG="--log-file=/home/migselv/Dokumenter/.backup-logs/$DATO"
DEST="admin@192.168.10.4:/share/Backup"
#Script:
# "Backup af /etc/ mappen til NAS"
rsync -e 'ssh -i /home/migselv/.ssh/id_rsa' $OPTS $LOG.etc /etc $DEST/
# "Backup af /usr/local/ mappen til NAS"
rsync -e 'ssh -i /home/migselv/.ssh/id_rsa' $OPTS $LOG.usr /usr/local/ $DEST/usr_local/
# "Backup af /home/migselv/ mappen til NAS"
rsync -e 'ssh -i /home/migselv/.ssh/id_rsa' $OPTS $LOG.home /home/migselv $DEST/
Det skal bemærkes, at afsnittet 'ssh -i /home/migselv/id_rsa' ikke fungerer, hvis det lægges ind i en variabel. Jeg har derfor måtte angive det "direkte" i hver kodelinie - og ikke øverst under definitionen af OPTS
Det er nok også på sin plads at nævne, at jeg i filen .ekskluder har angivet, hvilke filer og mapper, jeg ikke ønsker at backup'en skal omfatte.
Er vi så snart færdige?
Ja, det er ikke meget galt - vi mangler blot at få kørt scriptet helt af sig selv og uden min aktive medvirken med jævne mellemrum.
Crontab er svaret på, hvordan man får skidtet til at køre af sig selv.
Det kan indledningsvis være en god ide at læse man-siderne til cron, hvor disse fire sider anbefales af http://troy.jdmz.net/cron/:
Kode: Vælg alt
man crontab
man -s 5 crontab
man -s 8 crontab
man cron
For at få oprettet en crontab bruges blot koden:
Kode: Vælg alt
sudo crontab -e
Herved får man adgang til root's crontab. Man kan også blot angive "crontab -e" som kode (uden sudo), hvorved man får adgang til "sin egen" crontab.
Desværre har det vist sig, at backup-scriptet (på grund af "/etc/") ikke fungerer, når det ikke er root, som udfører.
Derfor bruger jeg altså: sudo crontab -e
Kommandoen åbner den lille teksteditor "nano", hvor kan man kan skrive sin kode, gemme filen (med ctrl+O) og lukke editoren igen (med ctrl+X)
Crontabs øverste linje ser som udgangspunkt således ud:
Kode: Vælg alt
# mh hd dom moy dow command
Dette er en angivelse af, hvordan man "programmerer" cron, og kan læses således:
- mh = minute of the hour
- hd = hour of the day
- dom = day of the month
- moy = month of the year
- dow = day of the week
- command line
Jeg kan anbefale, at læse mere om emnet på http://troy.jdmz.net/cron/, og blot afslutte dette indlæg med at angive "min" kodning af cron, som i al sin enkelthed betyder, at scriptet "backup.sh" bliver kørt hver anden time hver fredag, lørdag og søndag, første gang kl. 15 og sidste gang kl. 21:
Kode: Vælg alt
0 15-21/2 * * 5-7 /usr/local/bin/backup.sh