Cron rejtély...

Fórumok

Üdv!

A helyzet a következő: Van két irodai szerver (ubuntu 9.10, mindkettőn ugyanaz a user neve), az egyik sambázik, a másik meg devként ketyeg, de szeretném tükrözni rá a sambás gép pár könyvtárát automatikusan.

Ez alapján: http://sial.org/howto/rsync/ (Backups with rsync and SSH bekezdés) létrehoztam az ssh kulcsokat. Ez szerintem működik, mivel az rsync-es scriptemet a dev szerverről terminálban indítva jelszó kérés nélkül működik hibátlanul.

Itt az rsync script:

#/bin/sh
/usr/bin/rsync -avz --log-file=/home/xxx/mirror-office/sync.log xxx@192.168.0.200:/home/xxx/Dokumentumok /home/xxx/mirror-office

Szóval ez terminálban indítva működik, nem kér jelszót se. Gondoltam berakom cron-ba crontab -e-vel:
*/20 * * * * /home/xxx/mirror-office/sync

Ez le is fut, a sync.log-ban viszont a következő található:
2010/01/19 11:10:02 [6403] rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
2010/01/19 11:10:02 [6403] rsync error: unexplained error (code 255) at io.c(600) [receiver=3.0.6]

Nem értem mi a baja, segítsetek léci...

EDIT: A megoldás lejjebb!!!

Hozzászólások

Szia!

-a megfelelő userként fut -e?
-PATH változó rendben van? Érdemes a scripted elejére export PATH=/bin:/sbin:/usr/bin:/usr/sbin stb... régi Debiannál voltak ilyen gondok
-Ha kulccsal loginoltatod az ssh-t, akkor ugy tudom ezt az rsync igy szereti: rsync -e "ssh -i ssh.key" -avz stb...
-crontabba hivd meg igy a scripted, hátha csak lemaradsz valami hasznos üzenetrol: */20 * * * * /home/xxx/mirror-office/sync >/home/xxx/mirror-office/sync.crondebug 2>&1

Hirtelen ezek jutottak eszembe.

Tipp: LAN-on lehet, hogy nem célszerű a -z kapcsoló. A procinak nagyobb falat betömöríteni, mint a hálókártyának tömörítetlenül átküldeni 100 megán:) Ha neten keresztül tolod, akkor nem szóltam.

JSI

"...Ha kulccsal loginoltatod az ssh-t, akkor ugy tudom ezt az rsync igy szereti: rsync -e "ssh -i ssh.key" -avz stb..."

szerintem felesleges, én csak publikus kulccsal rsync-elek, de még soha nem használtam így.

szerk.: bocs, közben leesett hogy nem alapértelmezett nevű a kulcs, ezért kell

Szia!

Szerintem valami jogosultsag problemad van. Pl. a cron -t futtato user nem fer hozza az ssh kulcshoz.

lehet, hogy a cron bin-ként fut és nem rootként/mezei userként.

> Sol omnibus lucet.

No, az itt leirtaknak megfelelően változtattam pár dolgot:

A sync script:

#/bin/sh
/usr/bin/rsync -e "ssh -l xxx -i /home/xxx/mirror-office/passwd" -avz --log-file=/home/xxx/mirror-office/sync.log xxx@192.168.0.200:/home/xxx/Dokumentumok /home/xxx/mirror-office

Létrehoztam a passwd fájlt, benne van a jelszó. owner: xxx group: xxx jogok: 600
Más jogokkal a sync.crondebug arra panaszkodik, hogy túl nyiltak a jogosultságok rajta...

Terminálból indítva továbbra is tökéletesen működik, cronbol viszont:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: unexplained error (code 255) at io.c(600) [receiver=3.0.6]

Kikommenteztem crontab -e -ben a dolgot és beletettem ugyanazt a /etc/crontabba odaírva, hogy xxx user... hátha az a baja, de ugyanez az error van így is?

Tippek?

a script az user crontab-jaban van vagy a root crontab-jaban?
az ssh kulcsot ugyanazzal a user-rel generaltad?
a cron logja /var/log/cron mit ir?

/var/log/auth.log

Jan 19 14:51:01 xxx-dev CRON[8008]: pam_unix(cron:session): session opened for user xxx by (uid=0)
Jan 19 14:51:01 xxx-dev CRON[8008]: pam_unix(cron:session): session closed for user xxx
Jan 19 14:54:01 xxx-dev CRON[8015]: pam_unix(cron:session): session opened for user xxx by (uid=0)
Jan 19 14:54:01 xxx-dev CRON[8015]: pam_unix(cron:session): session closed for user xxx
Jan 19 14:57:01 xxx-dev CRON[8022]: pam_unix(cron:session): session opened for user xxx by (uid=0)
Jan 19 14:57:01 xxx-dev CRON[8022]: pam_unix(cron:session): session closed for user xxx

sync.crondebug

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: unexplained error (code 255) at io.c(600) [receiver=3.0.6]

Ezek vannak csak :-(

Ezúttal is nagyon köszönöm a tippet, ezt kaptam:

(Még nem sikerült értelmezni mi a hiba, segíts léci)

opening connection using: /usr/bin/ssh -v -l xxx -i /home/xxx/mirror-office/passwd -l xxx 192.168.0.200 rsync --server --sender -vvvlogDtprze.iLs . /home/xxx/Dokumentumok
OpenSSH_5.1p1 Debian-6ubuntu2, OpenSSL 0.9.8g 19 Oct 2007
debug1: Reading configuration data /etc/ssh/ssh_config

debug1: Applying options for *

debug1: Connecting to 192.168.0.200 [192.168.0.200] port 22.

debug1: Connection established.

debug1: identity file /home/xxx/mirror-office/passwd type -1

debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1p1 Debian-6ubuntu2

debug1: match: OpenSSH_5.1p1 Debian-6ubuntu2 pat OpenSSH*

debug1: Enabling compatibility mode for protocol 2.0

debug1: Local version string SSH-2.0-OpenSSH_5.1p1 Debian-6ubuntu2

debug1: SSH2_MSG_KEXINIT sent

debug1: SSH2_MSG_KEXINIT received

debug1: kex: server->client aes128-cbc hmac-md5 none

debug1: kex: client->server aes128-cbc hmac-md5 none

debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent

debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP

debug1: SSH2_MSG_KEX_DH_GEX_INIT sent

debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY

debug1: Host '192.168.0.200' is known and matches the RSA host key.

debug1: Found key in /home/xxx/.ssh/known_hosts:1

debug1: ssh_rsa_verify: signature correct

debug1: SSH2_MSG_NEWKEYS sent

debug1: expecting SSH2_MSG_NEWKEYS

debug1: SSH2_MSG_NEWKEYS received

debug1: SSH2_MSG_SERVICE_REQUEST sent

debug1: SSH2_MSG_SERVICE_ACCEPT received

debug1: Authentications that can continue: publickey,password

debug1: Next authentication method: publickey

debug1: Trying private key: /home/xxx/mirror-office/passwd

debug1: PEM_read_PrivateKey failed

debug1: read PEM private key done: type

debug1: read_passphrase: can't open /dev/tty: No such device or address

debug1: Next authentication method: password

debug1: read_passphrase: can't open /dev/tty: No such device or address

debug1: Authentications that can continue: publickey,password

Permission denied, please try again.

debug1: read_passphrase: can't open /dev/tty: No such device or address

debug1: Authentications that can continue: publickey,password

Permission denied, please try again.

debug1: read_passphrase: can't open /dev/tty: No such device or address

debug1: Authentications that can continue: publickey,password

debug1: No more authentication methods to try.

Permission denied (publickey,password).

rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: unexplained error (code 255) at io.c(600) [receiver=3.0.6]
_exit_cleanup(code=12, file=io.c, line=600): about to call exit(255)

ha /home/xxx/mirror-office/passwd a /home/xxx/.ssh/backup lett akkot ok, bar ha a key nem ok akkor nem menne parancssorbol sem password nelkul, bar amikor eloszor irtad, hogy megy akkor meg nem volt ssh auth benne. De ha mondjuk az scp megy jelszo nelkul akkor biztos jo pl. scp xxx@192.168.0.200://home/xxx/Dokumentumok/valami /home/xxx/.

Ne haragudj, nincs időm végigolvasni pontosan a problémát, lehet, hogy nem ide vág, vagy volt már, de egyszer ezért volt bajom a cronnal: a cron nem szereti a .-ot file nevekben.

Lényegében ott csesztem el, hogy nem a ~/.ssh/backup nevű fájlt adtam meg key-nek (máshol valahol az kellett).

Az office szerveren ugyanezt megcsináltam, itt a működő sorrend:

"A" szerver <- amit tükrözni akarunk
"B" szerver <- ahova áttöltjük az adatokat

Megjegyzés1: Nálam mindkét gépen ugyanaz a usernév, a script átírásakor figyelembe kell venni!
Megjegyzés2: A sok próbálgatás miatt felesleges loggolás meg pár egyéb dolog biztos van benne

1) openssh-server telepítése az "A" gépen

2) private/public key generálás a "B" gépen

$ ssh-keygen -C backup -t rsa -f ~/.ssh/backup

3) a ~/.ssh/backup.pub fájlt a "B" gépről átmásoljuk az "A" gépre az ottani ~/.ssh könyvtárba

4) Az "A" gépen hozzáadjuk a ~/.ssh/authorized_keys -hez a "B" gép publikus kulcsát

$ cat ~/.ssh/backup.pub ~/.ssh/authorized_keys

5) A "B" gépen létrehozzuk a célkönyvtárat, pl ~/mirror-a

6) A ~/mirror-a könyvtárban létrehozzuk a sync scriptet és futtathatóvá tesszük. A script tartalma:

#/bin/sh
rm /home/userneve/mirror-a/synclog
/usr/bin/rsync -e "/usr/bin/ssh -v -l userneve -i /home/userneve/.ssh/backup" -avz --delete --log-file=/home/userneve/mirror-a/synclog userneve@azAgepIPcime:/home/userneve/tukrozniKivantKonyvtar /home/userneve/mirror-a

7) A "B" gépen berakjuk a scriptet a /etc/crontab -ba (Én sudo mc-vel szeretem csinálni az ilyesmit)

*/30 * * * * userneve /home/userneve/mirror-a/sync > /home/userneve/mirror-a/synccrondebug 2>&1

Ennyi, nálam müxik, szivesen beszélek még róla ;-)

Tenchi