Frage zu bash-Skript

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Frage zu bash-Skript

Beitrag von Duff » 05.06.2009 15:59:59

Hallo,

ich habe mal eine Frage zu einem Bash-Skript.

Verstehe nicht, warum es nicht funktioniert, sobald ich nur einen Variable deklariere.

DAs folgende Skript funktioniert so nicht:

Code: Alles auswählen

1 if [ -n "$1" ]
2 then
3 	SERVER="$1"
4 else
5 	echo "Error: Usage $0 <fqdn-hostname> [<ssh-port>]"
6 	exit
7 fi
8 if [ $# -eq 2 ]
9 then
10 	SSHPORT=$2
11 else
12 	SSHPORT=22
13 fi
14 DATA_PATH="/home/daniel/server/backup"
15 PATH="etc"
16 /usr/bin/rsync -avz --numeric-ids -e "ssh -p $SSHPORT" --delete --delete-excluded $SERVER:/etc $DATA_PATH

Die entsprechende Fehlermeldung:

Code: Alles auswählen

daniel@daniel-laptop:~/server/scripts$ ./backup-test.sh remote-server 222
rsync: Failed to exec ssh: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(84) [receiver=3.0.3]
rsync: writefd_unbuffered failed to write 4 bytes [receiver]: Broken pipe (32)
rsync error: error in IPC code (code 14) at io.c(1544) [receiver=3.0.3]
Kommentiere ich allerdings die Zeile 15 ein, funktioniert das Skript.
Dabei verwende ich die Variable doch noch nichtmal ($PATH). Verstehe nicht, warum sich das Skript dann nicht mehr ausfürhen lässt.
Oh, yeah!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Frage zu bash-Skript

Beitrag von Duff » 05.06.2009 16:13:29

Ok, es funktioniert nun, wenn ich die Variable anders benenne (z.B. REMOTE_PATH).

Liegt es eventuell daran, dass mit der Variablen $PATH im Skript versucht wird auf die Umgebungsvariable $PATH zu zugreifen?
Oh, yeah!

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zu bash-Skript

Beitrag von habakug » 05.06.2009 16:29:40

Hallo!
man bash hat geschrieben:PATH The search path for commands. It is a colon-separated list of
directories in which the shell looks for commands (see COMMAND
EXECUTION below). A zero-length (null) directory name in the
value of PATH indicates the current directory. A null directory
name may appear as two adjacent colons, or as an initial or
trailing colon. The default path is system-dependent, and is
set by the administrator who installs bash. A common value is
‘‘/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin’’.
"PATH" ist also schon belegt.

Gruß, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Frage zu bash-Skript

Beitrag von Duff » 05.06.2009 16:34:38

Ok, danke. Hatte den Fehler ja irgendwie schon selber gefunden, wobei die Fehlermeldung mich nicht wirklich darauf schließen ließ.

Gibt es noch eine Möglichkeit, wie ich die Daten aus dem Verzeichnis /etc auf dem remote-Server als nicht root-user sichern kann ohne ein root-Login auf dem remote-Server zu erlauben (und ohne die Rechte auf dem remote-Server dem user anzupassen)?
Oh, yeah!

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zu bash-Skript

Beitrag von habakug » 05.06.2009 16:43:08

Hallo!
man rsync hat geschrieben:If you need to specify a different remote-shell user, keep in mind that
the user@ prefix in front of the host is specifying the rsync-user
value (for a module that requires user-based authentication). This
means that you must give the ’-l user’ option to ssh when specifying
the remote-shell, as in this example that uses the short version of the
--rsh option:

rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest

The “ssh-user” will be used at the ssh level; the “rsync-user” will be
used to log-in to the “module”.
Gruß, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Frage zu bash-Skript

Beitrag von Duff » 05.06.2009 16:53:28

Danke, aber so richtig verstanden habe ich nicht. Wenn ich mich nun per daniel mit ssh anmelde, kann ich doch nicht mit root@remote-server mal ebenso zum user root werden.

Auf mein Skript bezogen:

Code: Alles auswählen

/usr/bin/rsync -avz --numeric-ids -e "ssh -l daniel -p $SSHPORT" --delete --delete-excluded root@$SERVER:/etc $DATA_PATH
...funktioniert nicht.
Oh, yeah!

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Frage zu bash-Skript

Beitrag von habakug » 05.06.2009 17:27:52

Hallo!

Wenn du über den rsync-Daemon zugreifst brauchst du zwei Doppelpunkte:

Code: Alles auswählen

root@$SERVER::/etc
man rsync hat geschrieben:Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
Gruß, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Frage zu bash-Skript

Beitrag von Duff » 05.06.2009 17:52:48

Mmh... da bekomme ich dann

Code: Alles auswählen

ERROR: The remote path must start with a module name
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
Verstehe dass mit den Module-Namen nicht wirklich.

Der Aufruf war:

Code: Alles auswählen

/usr/bin/rsync -avz --numeric-ids -e "ssh -l daniel -p $SSHPORT" --delete --delete-excluded root@$SERVER::$REMOTE_PATH $DATA_PATH
Oh, yeah!

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Frage zu bash-Skript

Beitrag von Meillo » 05.06.2009 21:36:39

btw: Variablennamen in Shellscripten müssen keineswegs großgeschrieben sein. Das meinen nur viele da die bekannten Variablen ($PATH, $PS1, etc) großgeschrieben sind. Dabei sollte man viel eher kleingeschriebene Variablennamen in eigenen Shellscripten verwenden, damit keine Kollisionen auftreten.
Use ed once in a while!

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Frage zu bash-Skript

Beitrag von Duff » 06.06.2009 12:40:43

Meillo hat geschrieben: Dabei sollte man viel eher kleingeschriebene Variablennamen in eigenen Shellscripten verwenden, damit keine Kollisionen auftreten.
Ok, dies kann ich nun bestätigen ;-)

Aber wie muss man denn nun die Module bei rsync anwenden?
Oh, yeah!

Antworten