Für diverse Scripte oder Applikationen muss man per ssh ohne Passwort von einem Server auf den anderen zugreifen können.
Hier noch einmal kurz das vorgehen zur Generierung und Austausch der Schlüssel.
1. Login in den „Client“ mit dem User, welcher auf den Server zugreifen soll.
2. Schlüssel generieren.
user@client: ssh-keygen -t rsa
Es werden keine Kennwörter vergeben.
3. Ordner „.ssh“ im Userverzeichnis auf dem Server erstellen wenn nicht schon vorhanden.
user@client: ssh serveruser@server mkdir -p .ssh
4. Öffentlicher Schlüssel vom client in Datei auf dem Server hinterlegen.
user@client: cat .ssh/id_rsa.pub | ssh serveruser@server 'cat >> .ssh/authorized_keys'
Jetzt sollte man ohne Passwortabfrage auf den Server kommen.
user@client: ssh serveruser@server
Soll user@client noch auf weitere User/Server-Kombinationen Zugriff haben sind die Schritte 3 und 4 jeweils zu wiederholen.
Dateirechte
Besonders auf folgende Dateirechte ist zu achten. Sind diese falsch fällt SSH auf die Passwort-Authentifizierung zurück. Log-Dateien und SSH mit Parameter -vvv liefern leider oft keine aussagekräftige Fehlermeldung.
.ssh-Order: 700
.ssh/authorized_keys-Datei: 640
home-Verzeichnis von serveruser@server: nur der User serveruser@server darf Rechte haben. Gruppen und Andere dürfen keine Rechte haben. Dies gilt auch wenn serveruser@server das einzige Gruppenmitglied ist.
Noch ein Wort zur Sicherheit: Sollte ein Dritter auf user@client Zugriff bekommen, hat er auch Zugriff auf alle „serveruser@server“. Man sollte entsprechend für einzelne Aufgaben extra Benutzer auf den Servern anlegen und die Rechte dieser soweit wie möglich einschränken.
Manchmal bekomme ich aus der Windows-Welt Dateien mit folgendem Schema: „abc.jpg.jpg, def.jpg.jpg“. Ursache dürfte das imo unsinnige Feature sein Extensions zu verstecken in Verbindung mit Benutzern/Programmen, welche damit nicht klar kommen.
Die Dateien lassen sich zum Glück recht fix umbenennen:
for file in *.jpg.jpg; do mv "$file" "${file/.jpg/}"; done
Backup…
Ein Script um ein Dump einer MySQL-Datenbank zu ziehen und komprimiert als bz2-Datei zu speichern. Eine einfache Backuprotation wurde mit eingefügt, so dass die letzten X-Versionen in den Ordnern 1-X vorgehalten werden.
#!/bin/bash # This Backup-Script creates a dump from the entire mysql-Database # and safes it in the backup-directory. # Some Backup-Rotation included. BACKUP_ROOT="/mnt/backup/mysql" DB_USER="root" #DB-root DB_PASSWD="Password" #DB-root-pw ROTATIONS="7" #Number echo "" echo "MySQL-Backup" echo "----------------------------------------" echo "Rotating Backups..." echo "This may take some time..." # Delete eldest Backup rm -rf $BACKUP_ROOT/$ROTATIONS # create directories if needed COUNT=1 for ((i=1; $i<=$ROTATIONS; i++)) do if [ ! -d ${BACKUP_ROOT}/${COUNT} ]; then mkdir -p $BACKUP_ROOT/$COUNT fi COUNT=$(($COUNT+1)) done # rotating the backups COUNT=0 for ((i=1; $i<$(($ROTATIONS)); i++)) do mv $BACKUP_ROOT/$(($ROTATIONS-$COUNT-1)) $BACKUP_ROOT/$(($ROTATIONS-$COUNT)) COUNT=$(($COUNT+1)) done mkdir $BACKUP_ROOT/1 echo "" echo "Creating new backup from Database... " echo "This may take some time..." mysqldump --user=$DB_USER --password=$DB_PASSWD --all-databases | bzip2 > $BACKUP_ROOT/1/mysql-`date +%Y-%m-%d`.bz2 echo "----------------------------------------" echo "" echo "done" exit 0
…und Restore
Der Dump kann über eine Pipe entpackt und zurückgesichert werden.
bunzip2 < mysql-2013-10-25.bz2 | mysql -uroot -p