Remote Backup eines Linux-Servers mit SSH

  • Lege auf dem Server, auf dem du die Backups des entsprechenden Servers ablegegen willst, den User “backupid” an.
  • der User muss per public/private Key Authentifizierung auf die zu backupende Server kommen.
  • unter dem home-Verzeichnis von backupid einen ordner für die script anlegen, zb bin.

eine Datei mit dem Namen backup-dirs.sh erstellen und folgenden Inhalt einfügen:


#!/bin/bash
HOSTNAME=$1
CONFIGDIR=`echo $(dirname $0)`
BACKUPDIR_LOCAL=/home/backupid/backupdir
DATE=`date +%d-%m-%Y`


if [ "$HOSTNAME" == "" ]
then
echo error: please enter a hostname
exit 1
else
echo hostname ok > /dev/null
fi


PORTACCESSIBLE=`nmap -p 22 $HOSTNAME | grep "22/tcp open ssh" | wc -l`


if [ "$PORTACCESSIBLE" -eq 0 ]
then
echo "error: ssh port not accessible on $HOSTNAME"
exit 1
else
echo "ssh port is reachable on $HOSTNAME" > /dev/null
fi


if [ -e "$CONFIGDIR"/"$HOSTNAME".cfg ]
then
echo "config file for $HOSTNAME found" > /dev/null
else
echo "error: no config file for $HOSTNAME found"
exit 1
fi


CONFIGLINES=`cat "$CONFIGDIR"/"$HOSTNAME".cfg | wc -l`


if [ "$CONFIGLINES" -eq 0 ]
then
echo "error: config file is empty for $HOSTNAME"
exit 1
else
echo "config file is ok for $HOSTNAME" >/dev/null
fi


mkdir -p "$BACKUPDIR_LOCAL"/$HOSTNAME


rm -rf /tmp/"$HOSTNAME"-ssh-script.sh 1>/dev/null 2>&1
rm -rf /tmp/"$HOSTNAME"-filelist 1>/dev/null 2>&1
echo "#!/bin/bash" > /tmp/"$HOSTNAME"-ssh-script.sh
touch /tmp/"$HOSTNAME"-filelist


if [ -e /tmp/"$HOSTNAME"-ssh-script.sh ]
then
echo "temporary ssh backup script for $HOSTNAME successfully created" > /dev/null
else
echo "error: creation of temporary ssh backup script for $HOSTNAME failed"
exit 1
fi


while read line
do
LINE2=`echo $line | sed 's/\//-/g'`
echo "ssh root@"$HOSTNAME" "tar -cz \"$line\"" | dd of="$BACKUPDIR_LOCAL"/"$HOSTNAME"/"$HOSTNAME"-"$DATE""$LINE2".tar.gz" >> /tmp/"$HOSTNAME"-ssh-script.sh
echo "$BACKUPDIR_LOCAL"/"$HOSTNAME"/"$HOSTNAME"-"$DATE""$LINE2".tar.gz >> /tmp/"$HOSTNAME"-filelist
done < "$CONFIGDIR"/"$HOSTNAME".cfg chmod 750 /tmp/"$HOSTNAME"-ssh-script.sh /tmp/"$HOSTNAME"-ssh-script.sh 1>/dev/null 2>/dev/null


while read line
do
TARLINECOUNT=0
TARLINECOUNT=`tar -tf $line | wc -l`


if [ "$TARLINECOUNT" -eq 0 ]
then
echo "error: $line seems to be empty"
else
echo "$line is ok" > /dev/null
LINE_TO_DEL=`echo $line | sed 's/..-..-....-/*/' | sed 's/backupdir/backupdir.backupsrv/'`
rm $LINE_TO_DEL
cp $line /home/backupid/backupdir.backupsrv/$HOSTNAME
fi


done < /tmp/"$HOSTNAME"-filelist


exit 0

 

  • danach legt man im gleichen Ordner eine Config Datei an, welche entweder der Hostname oder die Ip-Addresse des zu backupenden Hosts als Namen besitzt.

z.b 192.168.1.10.cfg

dort schreibt man die zu sichernden Verzeichnisse hinein.

zb.

/home
/etc
/var
/root

wenn man das Script automatisch einmal pro Tag ausführen will ruft man es unter dem User backupid folgendermaßen auf:


crontab -e


0 5 * * * /home/backupid/bin/backup-dirs.sh

Esxi 4.0: Ssh Zugriff für Root und andere User

Hiho,

bei Vmware Esxi ist der Ssh Zugriff standardmäßig deaktiviert, er muss also zunächst aktiviert werden.

  1. an Esxi Server im laufenden Betrieb ALT + F1 drücken
  2. blind “unsupported” eintippen und root Kennwort eingeben
  3. Als nächstes muss die Konfigurationsdatei des Inet-Services editiert werden, dazu “vi /etc/inetd.conf” eingeben.
  4. Nun scrollt man bis zur Zeile die mit “#ssh” beginnt.
  5. Die Auskommentierung einfach entfernen und fertig “Taste x, ESC, wq!”

Anm für Vi-Gimps: ->Taste x, ESC, :wq!

Damit wäre nun schonmal der Ssh Zugriff aktiviert, allerdings kann man sich in diesem Zustand nur mit root anmelden, was nicht unbedingt empfehlenswert ist.

Nun fragt man sich warum andere User sich eigentlich nicht einloggen können. Der Grund dafür liegt am Home-Verzeichnis der jeweiligen User. Esxi löscht nach jedem Neustart den Ordner /home (Anmerkung: Root ist in sofern davon nicht betroffen weil sein homeverzeichnis “/” ist). Die User haben in der /etc/passwd ihr Homeverzeichnis aber in /home/<<user>> Da gibts dann also ein Problem, dass /home einfach nicht da ist.

Lösung:

  1. als root mit vi die Datei /etc/passwd öffnen
  2. zum entsprechenden User scrollen
  3. Bsp: –> luke:x:502:100:Lukas Skywalker:/home/luke:/bin/bash
  4. die rot markierte Stelle bezeichnet das Homeverzeichnis des Users, diese einfach durch “/” ersetzen.
  5. Speichern (ESC, :wq!) und fertig ist die Suppe.