Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

rsync et ssh

7 réponses
Avatar
TG
Bonjour,

voilà, je cherche à faire de la synchro entre serveurs distants.
J'ai lié les serveurs par clefs dsa avec passphrase.
j'ai bien lancé ssh-add pour la gestion des passphrases des clefs.
Si je fait une connexion en shell
# ssh root@mon.serveur.distant
pas de problème, je me connecte, le passphrase ne m'est pas demandé.
Si je saisi
# rsync -e "ssh -i /root/.ssh/id_dsa"
/chemin/du/fichier/a/envoyer/mon.fichier
root@mon.serveur.distant:/mon/chemin/distant/

en ligne de commande tout va bien, la synchro s'execute

si je met la commande dans un fichier nommé synchro,
# sh synchro
en ligne de commande tout se passe bien.

Par contre, si c'est une tache cron qui lance le script, plus rien ne
va. Le mode debug me permet de voir que la clef id_dsa est bien emise et
acceptée en shell:
debug1: Offering public key: /root/.ssh/id_dsa
debug3: send_pubkey_test
debug2: we send a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-dss blen 433
debug2: input_userauth_pk_ok: .....

par cron voici le resultat:
debug1: Offering public key: /root/.ssh/id_dsa
debug3: send_pubkey_test
debug2: we send a publickey packet, wait for reply
debug1: Authentications that continue: publickey,gssapi-with-mic,password
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey,gssapi-with-mic,password)
rsync: connection unexpectedly closed (0 bytes received so far) [sender]

Je me prend la tête depuis 2 jours sans résultat. Hors de question de
passer par des clefs sans passphrase, j'ai trop d'attaque de scan et
autre sur le serveur.
Un idée pourquoi en shell l'instruction fonctionne et pas en cron?

7 réponses

Avatar
Cumbalero
TG a écrit :

Un idée pourquoi en shell l'instruction fonctionne et pas en cron?



L'environnement d'exécution est différent.

Fait un env dans ta cron et un env dans un shell pour voir la
différence, et de là, soit tu inclues un setting des variables dans t on
script lancé en cron, soit tu sources le fichier d'environnement qui ne
l'est pas en cron.

A+
JF
Avatar
TG
Cumbalero a écrit :
TG a écrit :

Un idée pourquoi en shell l'instruction fonctionne et pas en cron?



L'environnement d'exécution est différent.

Fait un env dans ta cron et un env dans un shell pour voir la
différence, et de là, soit tu inclues un setting des variables dans ton
script lancé en cron, soit tu sources le fichier d'environnement qui ne
l'est pas en cron.

A+
JF



Bonjour et merci de cette réponse rapide.
entre temps, j'ai testé en le lançant par un script php (base de mon
developpement en fait)
voici ce que me donnent env en shell, via exec(php) et par cron
Je ne sais pas dire quelles sont les variables d'environnement qui sont
réellement nécessaires, mes recherches sur google n'ont pas donné grand
chose.
A noté que je suis connecté à mon serveur local par session vnc, mais
ceci ne devrait pas avoir d'incidence en principe.
Je vais essayer de comprendre ce qui manque, mais tout aide sera bien
venue, merci.

Tony

par cron:
SHELL=/bin/sh
USER=root
LD_LIBRARY_PATH PATH=/sbin:/usr/sbin:/bin:/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
_=/bin/env
SERVER_REALROOT=/usr/libexec/webmin
PWD=/usr/libexec/webmin/cron/
REMOTE_ADDR7.0.0.1
HOME=/root
SHLVL=2
LOGNAME=root

par script php via la commande exec('env > sortie.txt');
VNCDESKTOP=srv1ims:1 (root)
SSH_AGENT_PID#387
HOSTNAME=srv1ims
SHELL=/bin/bash
TERM=xterm
HISTSIZE00
SSH_CLIENT2.168.1.51 3224 22
GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2
WINDOWID`817416
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=no:fi:di;34:ln;36:pi@;33:so;35:bd@;33;01:cd@;33;01:or;05;37;41:mi;05;37;41:ex;32:*.cmd;32:*.exe;32:*.com;32:*.btm;32:*.bat;32:*.sh;32:*.csh;32:*.tar;31:*.tgz;31:*.svgz;31:*.arj;31:*.taz;31:*.lzh;31:*.lzma;31:*.zip;31:*.z;31:*.Z;31:*.dz;31:*.gz;31:*.bz2;31:*.tbz2;31:*.bz;31:*.tz;31:*.deb;31:*.rpm;31:*.jar;31:*.rar;31:*.ace;31:*.zoo;31:*.cpio;31:*.7z;31:*.rz;31:*.jpg;35:*.jpeg;35:*.gif;35:*.bmp;35:*.pbm;35:*.pgm;35:*.ppm;35:*.tga;35:*.xbm;35:*.xpm;35:*.tif;35:*.tiff;35:*.png;35:*.mng;35:*.pcx;35:*.mov;35:*.mpg;35:*.mpeg;35:*.m2v;35:*.mkv;35:*.ogm;35:*.mp4;35:*.m4v;35:*.mp4v;35:*.vob;35:*.qt;35:*.nuv;35:*.wmv;35:*.asf;35:*.rm;35:*.rmvb;35:*.flc;35:*.avi;35:*.fli;35:*.gl;35:*.dl;35:*.xcf;35:*.xwd;35:*.yuv;35:*.svg;35:
SSH_AUTH_SOCK=/tmp/ssh-ocfUe23329/agent.23329
GNOME_KEYRING_SOCKET=/tmp/keyring-biNGWE/socket
SESSION_MANAGER=local/unix:/tmp/.ICE-unix/23329
KONSOLE_DCOPÜOPRef(konsole-4620,konsole)
MAIL=/var/spool/mail/root
PATH=/sbin:/usr/sbin:/bin:/usr/bin
_=/bin/env
INPUTRC=/etc/inputrc
PWD=/altix/apache/htdocs/synchro
KONSOLE_DCOP_SESSIONÜOPRef(konsole-4620,session-1)
LANG=C
KDE_IS_PRELINKED=1
KDEDIRS=/usr
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
SHLVL=6
HOME=/root
GNOME_DESKTOP_SESSION_IDÞfault
LOGNAME=root
CVS_RSH=ssh
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-qvAoD5uE2s,guidj8d8a305de3071ff603a7004a2fc235
SSH_CONNECTION2.168.1.51 3224 192.168.1.100 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
DISPLAY=:1.0
G_BROKEN_FILENAMES=1
COLORTERM

et enfin par shell:
VNCDESKTOP=srv1ims:1 (root)
SSH_AGENT_PID#387
HOSTNAME=srv1ims
TERM=xterm
SHELL=/bin/bash
HISTSIZE00
SSH_CLIENT2.168.1.51 3224 22
GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2
WINDOWID`817416
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=no:fi:di;34:ln;36:pi@;33:so;35:bd@;33;01:cd@;33;01:or;05;37;41:mi;05;37;41:ex;32:*.cmd;32:*.exe;32:*.com;32:*.btm;32:*.bat;32:*.sh;32:*.csh;32:*.tar;31:*.tgz;31:*.svgz;31:*.arj;31:*.taz;31:*.lzh;31:*.lzma;31:*.zip;31:*.z;31:*.Z;31:*.dz;31:*.gz;31:*.bz2;31:*.tbz2;31:*.bz;31:*.tz;31:*.deb;31:*.rpm;31:*.jar;31:*.rar;31:*.ace;31:*.zoo;31:*.cpio;31:*.7z;31:*.rz;31:*.jpg;35:*.jpeg;35:*.gif;35:*.bmp;35:*.pbm;35:*.pgm;35:*.ppm;35:*.tga;35:*.xbm;35:*.xpm;35:*.tif;35:*.tiff;35:*.png;35:*.mng;35:*.pcx;35:*.mov;35:*.mpg;35:*.mpeg;35:*.m2v;35:*.mkv;35:*.ogm;35:*.mp4;35:*.m4v;35:*.mp4v;35:*.vob;35:*.qt;35:*.nuv;35:*.wmv;35:*.asf;35:*.rm;35:*.rmvb;35:*.flc;35:*.avi;35:*.fli;35:*.gl;35:*.dl;35:*.xcf;35:*.xwd;35:*.yuv;35:*.svg;35:
GNOME_KEYRING_SOCKET=/tmp/keyring-biNGWE/socket
SSH_AUTH_SOCK=/tmp/ssh-ocfUe23329/agent.23329
SESSION_MANAGER=local/unix:/tmp/.ICE-unix/23329
KONSOLE_DCOPÜOPRef(konsole-4620,konsole)
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
MAIL=/var/spool/mail/root
KONSOLE_DCOP_SESSIONÜOPRef(konsole-4620,session-3)
PWD=/root
INPUTRC=/etc/inputrc
KDE_IS_PRELINKED=1
LANG=fr_FR.UTF-8
KDEDIRS=/usr
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HOME=/root
SHLVL=3
GNOME_DESKTOP_SESSION_IDÞfault
LOGNAME=root
CVS_RSH=ssh
SSH_CONNECTION2.168.1.51 3224 192.168.1.100 22
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-qvAoD5uE2s,guidj8d8a305de3071ff603a7004a2fc235
LESSOPEN=|/usr/bin/lesspipe.sh %s
DISPLAY=:1.0
G_BROKEN_FILENAMES=1
COLORTERM _=/bin/env
Avatar
TG
après tri des lignes voici ce qui ressort comme différences:

shell
SHELL:/bin/bash
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
KONSOLE_DCOP_SESSIONÜOPRef(konsole-4620,session-3)
PWD=/root
KDE_IS_PRELINKED=1
LANG=fr_FR.UTF-8
SHLVL=3

php:
SHELL:/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/altix/apache/htdocs/synchro
KONSOLE_DCOP_SESSIONÜOPRef(konsole-4620,session-1)
LANG=C
KDE_IS_PRELINKED=1
SHLVL=6

cron:
SHELL=/bin/sh
LD_LIBRARY_PATH PATH=/sbin:/usr/sbin:/bin:/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
SERVER_REALROOT=/usr/libexec/webmin
PWD=/usr/libexec/webmin/cron/
REMOTE_ADDR7.0.0.1
SHLVL=2
Avatar
TG
ça vient d'ailleurs:
si je fait un ssh-add -L dans le script, j'ai une reponse comme :
Could not open a connection to your authentication agent.

Je pense que le pb vient de là en fait le passphrase ne pouvant pas être
rentré car pas de console, ça coince c'est sur!!
en console c'est bon, mais les shell sont differents

Je vais trouver....


TG a écrit :
après tri des lignes voici ce qui ressort comme différences:

shell
SHELL:/bin/bash
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

KONSOLE_DCOP_SESSIONÜOPRef(konsole-4620,session-3)
PWD=/root
KDE_IS_PRELINKED=1
LANG=fr_FR.UTF-8
SHLVL=3

php:
SHELL:/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PWD=/altix/apache/htdocs/synchro
KONSOLE_DCOP_SESSIONÜOPRef(konsole-4620,session-1)
LANG=C
KDE_IS_PRELINKED=1
SHLVL=6

cron:
SHELL=/bin/sh
LD_LIBRARY_PATH > PATH=/sbin:/usr/sbin:/bin:/usr/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

SERVER_REALROOT=/usr/libexec/webmin
PWD=/usr/libexec/webmin/cron/
REMOTE_ADDR7.0.0.1
SHLVL=2


Avatar
Philippe Weill
TG a écrit :


par cron:




par script php via la commande exec('env > sortie.txt');



SSH_AGENT_PID#387



SSH_AUTH_SOCK=/tmp/ssh-ocfUe23329/agent.23329





et enfin par shell:



SSH_AGENT_PID#387


t
SSH_AUTH_SOCK=/tmp/ssh-ocfUe23329/agent.23329



c'est clairement c'est deux là qui te pose probleme en cron ;-)
Avatar
TG
J'ai identifié le pb:
ssh-agent est lancé dans un shell depuis vnc alors que les cron sont au
démarrage du système.
comme ssh-agent est lié au shell qui le lnce, c'est normal que le
ssh-agent ne connaisse pas le cron, et que cron n'accede pas a ssh-agent
puisqu'ils sont lancés par des instances différentes!!!

y a plus qu'a faireen sorte que sh-agent soit démarré en premier par le
système puis les services lancés. Dans cet ordre, tout ce qui sera lancé
après demarrage devrait être vu par ssh-agent...

ouf! j'y arrive enfin

Philippe Weill a écrit :
TG a écrit :


par cron:




par script php via la commande exec('env > sortie.txt');



SSH_AGENT_PID#387



SSH_AUTH_SOCK=/tmp/ssh-ocfUe23329/agent.23329





et enfin par shell:



SSH_AGENT_PID#387


t
SSH_AUTH_SOCK=/tmp/ssh-ocfUe23329/agent.23329



c'est clairement c'est deux là qui te pose probleme en cron ;-)


Avatar
TG
dans la serie aide toi et le ciel t'aidera...
keychain est ton ami!
a placer dans le bash_profile
puis au debut des scripts
je me suis inspiré de
http://www.tux.org/~tbr/rsync/rsynchowto.html
suffisait de trouver la doc adécouette de rsync et hop!

voilà fin du fil, merci