rsync script no tty present and no askpass program specified

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
bastix
Beiträge: 8
Registriert: 12.05.2013 10:56:00

rsync script no tty present and no askpass program specified

Beitrag von bastix » 04.06.2013 11:23:57

Hallo,

bin am Rätsel was ich falsch mache. Vielleicht könnt ihr mir ja helfen.

Ausgangssituation:
Ein Debian Wheezy Server soll als Backupserver per Skript (Rsync) inkrementelle Backups der einzelnen Hosts durchführen. Das Skript funktioniert lokal ganz gut. Nur gibt es offensichtlich Probleme mit den Berechtigungen von Rsync(?).

Folgende Konfiguration:
Benutzer auf Server: bakuser
Benutzer auf Zielhost: bakuser

Auf Ziehost:

Code: Alles auswählen

ssh-keygen -t rsa -b 2048 -f /Users/basti/.ssh/identity_obstbuch
Dann Datei auf Server kopiert. Getestet mit:

Code: Alles auswählen

ssh -i /Users/basti/.ssh/identity_obstbuch bakuser@10.0.0.75
Auf Server:

Code: Alles auswählen

mkdir /home/bakuser/.ssh
touch /home/bakuser/.ssh/authorized_keys
--> Keine Passwortabfrage.

Rsync Skript:

Code: Alles auswählen

#!/bin/bash
SRC="/Users/basti/Desktop/testordner"
SRCHOST="obstbuch.fritz.box"
DEST="/home/bakuser/zielordner"
KEY=/home/bakuser/.ssh/authorized_keys
USER=bakuser
...

# Rsync inkrementell:
for (( i=0 ; i < ${#SRC[@]} ; i++ ))
do
rsync -avEz --delete --link-dest=${DEST[$i]}/`date +%Y%m%d_%H%M` -e "ssh -i $KEY" --rsync-path="sudo rsync" $USER@$SRCHOST:${SRC[$i]} ${DEST[$i]}/`date +%Y%m%d_%H%M`
done | tee > $DEST/tmp.log
...

exit 0
/etc/sudoers auf Server:

Code: Alles auswählen

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root	ALL=(ALL:ALL) ALL
bakuser ALL=(ALL)NOPASSWD:/usr/bin/rsync

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
Wenn ich nun das Rsync Skript auf dem Server ausführe, erhalte ich folgende Fehlermeldung:

Code: Alles auswählen

sudo: no tty present and no askpass program specified
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]
Wo liegt mein Fehler?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: rsync script no tty present and no askpass program speci

Beitrag von Cae » 04.06.2013 12:48:37

bastix hat geschrieben:

Code: Alles auswählen

ssh -i /Users/basti/.ssh/identity_obstbuch bakuser@10.0.0.75
[...]

Code: Alles auswählen

KEY=/home/bakuser/.ssh/authorized_keys
[...]
rsync -avEz --delete --link-dest=${DEST[$i]}/`date +%Y%m%d_%H%M` -e "ssh -i $KEY" --rsync-path="sudo rsync" $USER@$SRCHOST:${SRC[$i]} ${DEST[$i]}/`date +%Y%m%d_%H%M`
Wieso probierst du oben den richtigen (lokalen, privaten) Key aus und gibst dann unten als $KEY einen Pfad auf dem Server an? Typischer Fall von "die linke Hand weiss nicht was die Rechte tut" denke ich mal. ;)

Nochmal zur Klarstellung, die id_rsa ist privat und verlaesst die Maschine, auf der sie erzeugt wurde, bitte unter gar keinen Umstaenden. Die id_rsa.pub kann dagegen an die ~/.ssh/authorized_keys beliebiger Maschinen angehaengt werden. Das macht entweder ssh-keygen oder die Zeile

Code: Alles auswählen

$ ssh user@host 'mkdir -pm 700 ~/.ssh; cat >~/.ssh/authorized_keys' <id_rsa.pub
$ ssh -i id_rsa user@host # testen
(der Teil in Ticks ' wird remote ausgefuehrt.)

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

bastix
Beiträge: 8
Registriert: 12.05.2013 10:56:00

Re: rsync script no tty present and no askpass program speci

Beitrag von bastix » 04.06.2013 20:29:21

Hi,

danke für den Hinweis. Habe nun die *.pub auf den Server kopiert. Bekomme jedoch beim Ausführen des Skripts eine Passwortabfrage (was ich ja durch die RSA Keys verhindern wollte) und wieder den Fehler:

Code: Alles auswählen

sudo: no tty present and no askpass program specified
Nun habe ich erfahren dass bei ssh die -t Option helfen könnte. Fehlerausgabe ist dann die selbe.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: rsync script no tty present and no askpass program speci

Beitrag von Cae » 04.06.2013 20:44:01

Da ist noch was an der sudo-Konfiguration verkehrt, die Fehlermeldung entsteht naemlich bei dem Versuch, das Passwort einzulesen (was wegen NOPASSWD nicht geschehen sollte). Die SSH-Keys funktionieren zu diesem Zeitpunkt schon korrekt. Vielleicht stoert sich sudo an dem fehlenden (?) Leerzeichen zwischen der schliessenden Klammer ) und NOPASSWD:. Statt ALL koenntest du auch root probieren, was aber der Default sein sollte, sofern nix anderes angegeben ist.

Was passiert jetzt und nach den empfohlenen Aenderungen bei

Code: Alles auswählen

$ ssh -i /Users/basti/.ssh/identity_obstbuch bakuser@10.0.0.75 'id -u; sudo rsync --help | head -2'
?

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

bastix
Beiträge: 8
Registriert: 12.05.2013 10:56:00

Re: rsync script no tty present and no askpass program speci

Beitrag von bastix » 04.06.2013 20:53:25

Ok Moment mal. Ich war unter dem falschen Benutzer angemeldet! Benutzer soll ja der bakuser sein und nicht ich (basti).

Code: Alles auswählen

bash-3.2$ ssh -i /Users/bakuser/.ssh/identity_obstbuch bakuser@10.0.0.75 'id -u; sudo rsync --help | head -2'
1000
rsync  version 3.0.9  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Auf debianserver:

Code: Alles auswählen

bakuser@debianbackup:~$ ./backup_obstbuch.sh 

Password:
rsync: link_stat "/Users/basti/Desktop/testordner" failed: Permission denied (13)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1536) [Receiver=3.0.9]
Leider wird immer noch ein Passwort abgefragt was ja durch die Keys nicht mehr erfolgen sollte...
Da muss ich wohl noch zusehen dass ich die Mac OS X Benutzerrechte setzte bzw. bakuser in eine Gruppe aufnehme die Zugriff auf mein Homeverzeichnis hat (basti). Das soll ja gesichert werden.

Antworten