ubuntuusers.de

Backup mit RSYNC ssh fehlt

Status: Gelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

Kaffetrinker

Avatar von Kaffetrinker

Anmeldungsdatum:
8. August 2007

Beiträge: 205

Wohnort: St.Gallen

Guten Tag

Ich versuche mein Ubuntu Server auf einen Qnap zu sicher. Anhand von https://wiki.ubuntuusers.de/Skripte/Backup_mit_RSYNC/ und https://wiki.ubuntuusers.de/SSH/#Authentifizierung-ueber-Public-Keys

Nach dem ich das Skript ausführbar gemacht habe kommt

1
admin@die Adresse des qnap com's password:

was dann aber nicht funktioniert. Es müsste doch aussehen.

1
ssh admin@die Adresse des qnap .com

Skript:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
#!/bin/bash
# Simple backup with rsync
# local-mode, tossh-mode, fromssh-mode

SOURCES=(/root /etc /home /boot )
TARGET="/userver"

# edit or comment with "#"
#LISTPACKAGES=listdebianpackages        # local-mode and tossh-mode
MONTHROTATE=monthrotate                 # use DD instead of YYMMDD

RSYNCCONF=(--delete)
#MOUNTPOINT="/media/daten"               # check local mountpoint
MAILREC="......@gmail.com"

SSHUSER="admin"
#FROMSSH="fromssh-server"
TOSSH="die adresse von qnap.com"
SSHPORT=22

### do not edit ###

MOUNT="/bin/mount"; FGREP="/bin/fgrep"; SSH="/usr/bin/ssh"
LN="/bin/ln"; ECHO="/bin/echo"; DATE="/bin/date"; RM="/bin/rm"
DPKG="/usr/bin/dpkg"; AWK="/usr/bin/awk"; MAIL="/usr/bin/mail"
CUT="/usr/bin/cut"; TR="/usr/bin/tr"; RSYNC="/usr/bin/rsync"
LAST="last"; INC="--link-dest=$TARGET/$LAST"

LOG=$0.log
$DATE > $LOG

if [ "${TARGET:${#TARGET}-1:1}" != "/" ]; then
  TARGET=$TARGET/
fi

if [ "$LISTPACKAGES" ] && [ -z "$FROMSSH" ]; then
  $ECHO "$DPKG --get-selections | $AWK '!/deinstall|purge|hold/'|$CUT -f1 | $TR '\n' ' '" >> $LOG
  $DPKG --get-selections | $AWK '!/deinstall|purge|hold/'|$CUT -f1 |$TR '\n' ' '  >> $LOG  2>&1 
fi

if [ "$MOUNTPOINT" ]; then
  MOUNTED=$($MOUNT | $FGREP "$MOUNTPOINT");
fi

if [ -z "$MOUNTPOINT" ] || [ "$MOUNTED" ]; then
  if [ -z "$MONTHROTATE" ]; then
    TODAY=$($DATE +%y%m%d)
  else
    TODAY=$($DATE +%d)
  fi

  if [ "$SSHUSER" ] && [ "$SSHPORT" ]; then
    S="$SSH -p $SSHPORT -l $SSHUSER";
  fi

  for SOURCE in "${SOURCES[@]}"
    do
      if [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ]; then
        $ECHO "$RSYNC -e \"$S\" -avR \"$FROMSSH:$SOURCE\" ${RSYNCCONF[@]} $TARGET$TODAY $INC"  >> $LOG 
        $RSYNC -e "$S" -avR "$FROMSSH:\"$SOURCE\"" "${RSYNCCONF[@]}" "$TARGET"$TODAY $INC >> $LOG 2>&1 
        if [ $? -ne 0 ]; then
          ERROR=1
        fi 
      fi 
      if [ "$S" ]  && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
        $ECHO "$RSYNC -e \"$S\" -avR \"$SOURCE\" ${RSYNCCONF[@]} \"$TOSSH:$TARGET$TODAY\" $INC " >> $LOG
        $RSYNC -e "$S" -avR "$SOURCE" "${RSYNCCONF[@]}" "$TOSSH:\"$TARGET\"$TODAY" $INC >> $LOG 2>&1 
        if [ $? -ne 0 ]; then
          ERROR=1
        fi 
      fi
      if [ -z "$S" ]; then
        $ECHO "$RSYNC -avR \"$SOURCE\" ${RSYNCCONF[@]} $TARGET$TODAY $INC"  >> $LOG 
        $RSYNC -avR "$SOURCE" "${RSYNCCONF[@]}" "$TARGET"$TODAY $INC  >> $LOG 2>&1 
        if [ $? -ne 0 ]; then
          ERROR=1
        fi 
      fi
  done

  if [ "$S" ] && [ "$TOSSH" ] && [ -z "$FROMSSH" ]; then
    $ECHO "$SSH -p $SSHPORT -l $SSHUSER $TOSSH $LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG  
    $SSH -p $SSHPORT -l $SSHUSER $TOSSH "$LN -nsf \"$TARGET\"$TODAY \"$TARGET\"$LAST" >> $LOG 2>&1
    if [ $? -ne 0 ]; then
      ERROR=1
    fi 
  fi 
  if ( [ "$S" ] && [ "$FROMSSH" ] && [ -z "$TOSSH" ] ) || ( [ -z "$S" ] );  then
    $ECHO "$LN -nsf $TARGET$TODAY $TARGET$LAST" >> $LOG
    $LN -nsf "$TARGET"$TODAY "$TARGET"$LAST  >> $LOG 2>&1 
    if [ $? -ne 0 ]; then
      ERROR=1
    fi 
  fi
else
  $ECHO "$MOUNTPOINT not mounted" >> $LOG
  ERROR=1
fi
$DATE >> $LOG
if [ -n "$MAILREC" ]; then
  if [ $ERROR ];then
    $MAIL -s "Error Backup $LOG" $MAILREC < $LOG
  else
    $MAIL -s "Backup $LOG" $MAILREC < $LOG
  fi
fi

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4694

Wohnort: Berlin

@Kaffetrinker: Wenn Du nach dem Passwort gefragt wirst, dann hat offenbar das hinterlegen des SSH-Schlüssels nicht geklappt.

Hast Du denn manuell überprüft ob Du dich ohne Passwort per SSH anmelden kannst?

Kaffetrinker

(Themenstarter)
Avatar von Kaffetrinker

Anmeldungsdatum:
8. August 2007

Beiträge: 205

Wohnort: St.Gallen

ja es funktioniert er fragt nur nach dem

1
Enter passphrase for key '/home/...../.ssh/id_rsa':

In der Anleitung Authentifizierung über Public-Keys steht :

Der voreingestellte Dateiname (id_rsa) kann einfach mit der Taste ⏎ bestätigt werden, außer man möchte sich ein weiteres Schlüsselpaar erzeugen. Von der Benutzung einer leeren Passphrase ist jedoch abzuraten, weil sonst jeder, der evtl. in den Besitz dieser Datei kommt, sofortigen Zugriff auf alle zugehörigen Systeme erhält.

Das ist doch normal oder ?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13216

Dieses Script ist aus verschiedenen Gründen furchtbar (paranoide Ersetzung von Befehlen durch Variablen, Nutzung von groß geschriebenen Variablennamen für skriptinterne Variablen, umständliche Anwendung von Bedingungen, schlechte logische Struktur, ständiges Öffnen der Logdatei, keine Funktionen für sich wiederholende Aufgaben...). Ich hatte allerdings noch keine Muße, es mal durch eine bessere Version zu ersetzen.

Führe das Skript doch mal mit bash -x das-script aus und poste die Ausgabe hier in einem Codeblock.

Kaffetrinker

(Themenstarter)
Avatar von Kaffetrinker

Anmeldungsdatum:
8. August 2007

Beiträge: 205

Wohnort: St.Gallen

Ich würde auch ein anderes script nehmen ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
+ SOURCES=(/root /etc /home /boot)
+ TARGET=/userver
+ MONTHROTATE=monthrotate
+ RSYNCCONF=(--delete)
+ MAILREC=@gmail.com
+ SSHUSER=admin
+ TOSSH=kmer.m.com
+ SSHPORT=22
+ MOUNT=/bin/mount
+ FGREP=/bin/fgrep
+ SSH=/usr/bin/ssh
+ LN=/bin/ln
+ ECHO=/bin/echo
+ DATE=/bin/date
+ RM=/bin/rm
+ DPKG=/usr/bin/dpkg
+ AWK=/usr/bin/awk
+ MAIL=/usr/bin/mail
+ CUT=/usr/bin/cut
+ TR=/usr/bin/tr
+ RSYNC=/usr/bin/rsync
+ LAST=last
+ INC=--link-dest=/userver/last
+ LOG=/root/backup.sh.log
+ /bin/date
+ '[' r '!=' / ']'
+ TARGET=/userver/
+ '[' '' ']'
+ '[' '' ']'
+ '[' -z '' ']'
+ '[' -z monthrotate ']'
++ /bin/date +%d
+ TODAY=30
+ '[' admin ']'
+ '[' 22 ']'
+ S='/usr/bin/ssh -p 22 -l admin'
+ for SOURCE in '"${SOURCES[@]}"'
+ '[' '/usr/bin/ssh -p 22 -l admin' ']'
+ '[' '' ']'
+ '[' '/usr/bin/ssh -p 22 -l admin' ']'
+ '[' krmer.md.com ']'
+ '[' -z '' ']'
+ /bin/echo '/usr/bin/rsync -e "/usr/bin/ssh -p 22 -l admin" -avR "/root" --delete "krmer.md.com:/userver/30" --link-dest=/userver/last '
+ /usr/bin/rsync -e '/usr/bin/ssh -p 22 -l admin' -avR /root --delete 'krmer.m.com:"/userver/"30' --link-dest=/userver/last

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13216

Ich sehe da jetzt keine Ausgabe, die nach einem Passwort fragt. Was geht denn jetzt schief?

Kaffetrinker

(Themenstarter)
Avatar von Kaffetrinker

Anmeldungsdatum:
8. August 2007

Beiträge: 205

Wohnort: St.Gallen

Ich wollte kein Doppelpost machen und ich habe die letzte zeile nicht kopiert

1
2
 /usr/bin/rsync -e '/usr/bin/ssh -p 22 -l admin' -avR /root --delete 'krmer.m.com:"/userver/"30' --link-dest=/userver/last
admin@kmer.m.com's password:

Kaffetrinker

(Themenstarter)
Avatar von Kaffetrinker

Anmeldungsdatum:
8. August 2007

Beiträge: 205

Wohnort: St.Gallen

Was müsste ich den machen damit admin@lalala.com funktioniert?

Ist ja nicht dasselbe wie ssh admin@lalala.com oder habe ich da einen Überlegungsfehler?

Wenn ich es könnte würde ich ja borg benützen aber leider kommt auf der qnap einen Fehlermeldung.

1
2
[~] # borg
-sh: /usr/local/bin/borg: cannot execute binary file

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4694

Wohnort: Berlin

@Kaffetrinker: Du musst Dich von dem Benutzer aus von dem das Skript ausgeführt wird ohne jegliche Eingabe von Passwörtern anmelden können. Das kannst Du bisher ja nicht.

Für Skripte die ohne Benutzerinteraktion laufen sollen, darf auch auf dem Schlüssel keine Passphrase gesetzt sein. Sonst muss man ja doch wieder ein Passwort eingeben, zu dem Zeitpunkt wo das Skript läuft.

frank-w

Anmeldungsdatum:
30. September 2008

Beiträge: 419

kleiner Schwenk aus meiner Erfahrung als QNAP-User:

bei mir war es so, dass das Home-dir des admin-users immer platt gemacht wurde von dem System. d.h. dass u.a. die AuthorizedKeys weg bzw. leer war.

damit ssh via public-key möglich war, musste ich den entware-ng-ssh-server verwenden und dort den Speicherort der AuthorizedKeys angeben (nicht das Home-dir verwenden!). weiterhin werden von sämtlichen Freigaben scheinbar die Berechtigungen zurückgesetzt, somit darf die AuthorizedKeys nicht in einem Share liegen. auch bei deinem Client-Schlüssel musst du aufpassen, dass die Rechte passen (0600 und die übergeordneten Ordner dürfen auch nur bestimmte Rechte haben) siehe https://wiki.ubuntuusers.de/SSH/#Authentifizierung-ueber-Public-Keys

HTH Frank

Antworten |