SSH Zugang über cronjob steuern

Backup, Restore und Transfer von Daten
Post Reply
proweso
Posts: 14
Joined: 2003-04-11 11:22
Location: bei Hannover
 

SSH Zugang über cronjob steuern

Post by proweso »

Hallo,

Mein Problem:
Wie kann ich einen SSH-Zugang über einen Cronjob für eine gewisse Zeit freischalten?

Szenario:
Ich möchte ein Backup von Server 1 über eine SSH-Verbindung automatisch auf Server 2 sichern. Auf Server 1 ist ein User eingerichtet, der ein SSH-Login über dsa-Key erlaubt. Server 2 holt die Backup-Files über ein Cronjob-Script ab (rsync).

Das ganze funktioniert problemlos.

Nun wollte ich den SSH-Zugang von Server 1 nur für eine gewisse Zeit freigeben. Also habe ich auf Server 1 zwei weitere Cronjob's eingerichtet:
6:00 Uhr : usermod -s /bin/bash backupuser
6:30 Uhr : usermod -s /bin/false backupuser

Um 6:15 Uhr versucht Server 2 die Verbindung herzustellen:
rsync -e ssh -avzn Server1:/backupdir /backupdir

Es werden keine Dateien übertragen. rsync liefert keine Ausgabe.
Beide Server-Uhren laufen nahezu synchron.

Hat jemand eine Idee?

Gruß,
Andreas
Anonymous
 

Re: SSH Zugang über cronjob steuern

Post by Anonymous »

Hmm, ich hab das selbst ja auch noch nicht eingerichtet (bin gerade noch bei der Planung) aber sowohl in der FAQ http://www.rootforum.org/faq/index.php? ... 26&lang=de als auch auf der rsync-Homepage sieht der rsync-Aufruf anders aus. Da sind noch zwei :: hinter der IP vom rsync-Server. Schau doch einfach mal auf http://samba.anu.edu.au/rsync/examples.html.
Vielleicht hilfts ja.
Andreas
proweso
Posts: 14
Joined: 2003-04-11 11:22
Location: bei Hannover
 

Re: SSH Zugang über cronjob steuern

Post by proweso »

Hallo Andreas,

Das Backup-Script (rsync) funktioniert problemlos, wenn die Shell vom Backup-User (Server 1) auf /bin/bash steht.
Ich glaube, das Problem liegt beim Umschalten der Shell (usermod -s). Von der Konsole klappt es. Bei einem Aufruf vom Cronjob gehts nicht.
cye
Posts: 144
Joined: 2003-03-27 19:18
Location: Bayerischer Wald
 

Re: SSH Zugang über cronjob steuern

Post by cye »

gib doch mal im cron - job den absoluten pfad
zu dem usermod binary an ...
ralf_w
Posts: 14
Joined: 2003-12-07 16:55
 

Re: SSH Zugang über cronjob steuern

Post by ralf_w »

Ne ganz dumme frage, die Cronjobs werden von root ausgerführt??
proweso
Posts: 14
Joined: 2003-04-11 11:22
Location: bei Hannover
 

Re: SSH Zugang über cronjob steuern

Post by proweso »

gib doch mal im cron - job den absoluten pfad
zu dem usermod binary an ...
Im cronjob rufe ich ein Script auf, dass die Shell umschaltet und die Berechtigung der Backup-Files von root nach User ändert (bzw. umgekehrt).
Ich leite die Ausgabe per Mail an mich weiter. Das usermod binary gibt keine Meldung aus (müsste ansonsten meckern).
Zu Testzwecken habe ich noch ein paar echo's eingebaut, die allesamt mit der Mail ankommen.
Ne ganz dumme frage, die Cronjobs werden von root ausgerführt??
So ist es! Das Umschalten der Shell läuft über einen Root-cronjob.
Das Backup von Server 2 wird von einem User-cronjob gestartet, da der dsa-Key für das automatische SSH-Login vom User erstellt wurde.
ralf_w
Posts: 14
Joined: 2003-12-07 16:55
 

Re: SSH Zugang über cronjob steuern

Post by ralf_w »

Kann es sein das bei dir ein Parameter fehlt?

Muss es nicht heissen:

usermod -s -d/bin/bash backupuser


??

Gruss
Ralf
proweso
Posts: 14
Joined: 2003-04-11 11:22
Location: bei Hannover
 

Re: SSH Zugang über cronjob steuern

Post by proweso »

Hi Ralf,
Muss es nicht heissen:
usermod -s -d/bin/bash backupuser
Laut man-page setzt -d das Login-Directory. Ich möchte aber mit -s die Login-Shell umsetzen.


Was ich nicht versteh, ist die Tatsache dass rsync keine Meldung ausgibt, wenn die Shell über den Cronjob umgeschaltet wird.

Ich habe mal folgendes gemacht:

1. Auf Server 1 als root eingelogt und mein Script zum Abschalten der Shell aufgerufen (das gleiche ruft der cronjob auf).
2. Auf Server 2 als user eingelogt und das backup-script aufgerufen:

Code: Select all

--- Backup-Sync -------------------------------
rsync: connection unexpectedly closed (0 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
-----------------------------------------------
-> rsync meldet Verbindungsfehler.

3. Auf Server 1 als root eingelogt und mein Script zum Einschalten der Shell aufgerufen (das gleiche ruft der cronjob auf).
4. Auf Server 2 als user eingelogt und das backup-script aufgerufen:

Code: Select all

--- Backup-Sync -------------------------------
receiving file list ... done
abc/
abc/2003-12-10/
abc/2003-12-10/backup.tgz
wrote 32 bytes  read 4526848 bytes  3017920.00 bytes/sec
total size is 122049256  speedup is 26.96
-----------------------------------------------
-> Backup läuft einwandfrei durch

Wenn das Ein- und Ausschalten der Shell vom cron abläuft, bekomme ich folgende Ausgabe:

Code: Select all

--- Backup-Sync -------------------------------
-----------------------------------------------
Keine Fehlermeldung, kein Hinweis, keine Information.
Da frag ich mich, was der cronjob da anders macht :?:

Gruss,
Andreas
captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten
Contact:
 

Re: SSH Zugang über cronjob steuern

Post by captaincrunch »

Wie wär's denn, wenn du einfach mal das komplette Script hier posten würdest?
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
proweso
Posts: 14
Joined: 2003-04-11 11:22
Location: bei Hannover
 

Re: SSH Zugang über cronjob steuern

Post by proweso »

Wie wär's denn, wenn du einfach mal das komplette Script hier posten würdest?
Gute Idee!

Also, hier das Script (/scripts/enablesync.sh) mit dem ich auf Server 1 die Shell für den backupuser ein-/ausschalte sowie die Rechte im Backup-Verzeichnis setze:

Code: Select all

#!/bin/sh

# Parameter-Check
if [ $# -ne 1 ] ; then
  echo "-> Syntax: enablesync <ON/OFF>"
  exit 1
fi

case $1 in
  ON)  usermod -s /bin/bash backupuser
       chown backupuser:users -R /abc
       echo "Sync: Enable (shell)" ;;
  OFF) usermod -s /bin/false backupuser
       chown root:root -R /abc
       echo "Sync: Disable (no shell)" ;;
  *) echo "Parameter $1 not supported";;
esac
8O Dabei fällt mir auf, das das Script in /bin/sh und nicht in /bin/bash läuft. Könnte das schon das Problem sein ???

Das Script wird von einem root-cronjob aufgerufen und die Ausgabe per Mail an mich geschickt.

Code: Select all

00 6 * * * /scripts/enablesync.sh ON | mail -s "Sync-Enable" me@mymail.de
30 6 * * * /scripts/enablesync.sh OFF | mail -s "Sync-Disable" me@mymail.de
Erstellt habe ich den cronjob mit:

Code: Select all

crontab -e
darkspirit
Posts: 553
Joined: 2002-10-05 16:39
Location: D'dorf
Contact:
 

Re: SSH Zugang über cronjob steuern

Post by darkspirit »

Verwende mal den absoluten Pfad zu usermod. /bin/sh sollte bei dir ein Link zur Bash sein.. das ist normal und üblich in Shellscripts ;)
proweso
Posts: 14
Joined: 2003-04-11 11:22
Location: bei Hannover
 

Re: SSH Zugang über cronjob steuern

Post by proweso »

Verwende mal den absoluten Pfad zu usermod.
Vielen Dank an DarkSpirit und Cye. Das war's anscheinend.

Trotzdem ist mir immer noch nicht ganz klar, warum das Script aus der Shell einwandfrei funktioniert
und über den cron ohne Fehlermeldung die Arbeit verweigert.

Schätze, ich werde mich mal etwas mehr mit dem cron beschäftigen.

Vielen Dank an alle,
Andreas
boozedǃ
Posts: 47
Joined: 2003-09-27 14:55
Location: /root
 

Re: SSH Zugang über cronjob steuern

Post by boozedǃ »

Das liegt daran, dass CRON eine andere Shellumgebung verwendet, in der die Pfade nicht gesetzt sind.
Post Reply