# [Rsync] sur ssh [Résolu]

## jerep6

Salut,

Je souhaite utiliser rsync avec ssh sauf que ça ne fonctionne pas :

```
$ rsync -av -e "ssh" Rs/ 192.168.1.10::Public

Enter passphrase for key '/home/jerep6/.ssh/id_dsa':

rsync: connection unexpectedly closed (0 bytes received so far) [sender]

rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.5]

```

Voici la conf de rsync :

```
uid=nobody

gid=rsync

secrets file=/etc/rsyncd.secrets

strict modes=true

max connections=10

syslog facility=rsync

dont compress=*

[Public]

   path = /mnt/P

   comment = Tests de rsync public

   read only = false
```

Rsync et ssh fonctionne parfaitement indépendamment l'un de l'autre et quand j'utilise rsync sans module (utilisation de ":" au lui de "::") :

```
rsync -av -e "ssh" Rs/ 192.168.1.10:/mnt/P

Enter passphrase for key '/home/jerep6/.ssh/id_dsa':

sending incremental file list ......
```

Last edited by jerep6 on Fri Jul 03, 2009 1:13 pm; edited 1 time in total

----------

## kernelsensei

salut,

personnellement je n'ai jamais utilisé cette syntaxe, j'ai toujours fait simplement :

```
rsync user@host:chemin1 chemin2
```

après ya bien sûr des options que tu peux rajouter pour ton transfert

EDIT : Ya peut-être un truc que j'ai mal compris...

----------

## jerep6

Cette syntaxe fonctionne également chez moi, mais elle n'utilise pas les modules Rsync. Il faut spécifier le chemin entier. Dans mon cas /mnt/P au lui de Public

----------

## sd44

 *Quote:*   

> 
> 
> ```
> $ rsync -av -e "ssh" Rs/ 192.168.1.10::Public
> 
> ...

 

j'utilise parfois ce genre de commande mais plutot comme ça :

```
rsync -izau -e "ssh"  /sauvegarde/ pc1:/svg/ 
```

ou 

```
rsync -izau -e "ssh"   pc1:/svg/  /sauvegarde/
```

----------

## PabOu

Cela me semble un peu logique que, si tu spécifies SSH, tes extensions rsync ne fonctionnent plus car tu n'utilises plus le protocole rsync sur le réseau. Comme tu es en ssh, c'est SSH qui recherche le chemin ":Public" sur ton serveur.

Mais je me trompe peut-être. Comme beaucoup, je n'ai jamais utilisé ta façon de faire...

Pourtant, le post suivant (qui date un peu, certes) semble confirmer ceci : http://lists.samba.org/archive/rsync/2005-July/013069.html

----------

## geekounet

 *PabOu wrote:*   

> Cela me semble un peu logique que, si tu spécifies SSH, tes extensions rsync ne fonctionnent plus car tu n'utilises plus le protocole rsync sur le réseau. Comme tu es en ssh, c'est SSH qui recherche le chemin ":Public" sur ton serveur.
> 
> Mais je me trompe peut-être. Comme beaucoup, je n'ai jamais utilisé ta façon de faire...
> 
> Pourtant, le post suivant (qui date un peu, certes) semble confirmer ceci : http://lists.samba.org/archive/rsync/2005-July/013069.html

 

C'est à peu près ça, quand on le fait par ssh, ça execute simplement un autre rsync sur l'hote distant, et les 2 causent par leur stdin/stdout par le canal ssh, et donc oui le protocole rsync n'a pas lieu dans ce cas là, surtout qu'il ne cause tout simplement pas au rsyncd de l'hote distant (alors que c'est lui qui a les liste des modules, etc.). (EDIT: en effet, ton lien confirme bien cela PabOu)

Si tu tiens à utiliser ces modules rsync tout en passant sur ssh, il va te falloir faire faire un peu plus compliqué, c'est à dire de faire un forward ssh vers le rsyncd de l'hote distant et ensuite lancer ton rsync vers localhost:ton_port_de_forward. Mais je ne suis pas sur que t'y gagnes des masses par rapport à simplement indiquer le path complet...  :Wink: 

----------

## scherz0

 *jerep6 wrote:*   

> Voici la conf de rsync :

 

Le fichier que tu mentionnes est-il /etc/rsyncd.conf ?  Dans ce mode d'utilisation, le serveur qui est lancé (à chaque connexion) cherche son fichier de conf dans le homedir de l'utilisateur, et non pas dans /etc/.  Essaie avec le fichier rsyncd.conf suivant dans ton homedir :

```

use chroot = no

dont compress = * 

syslog facility = rsync 

[Public]

   path = /mnt/P

   comment = Tests de rsync public

   read only = false

```

Les autres options qui apparaissent dans le fichier de conf que tu as donné n'ont pas de sens dans ce contexte.

----------

## jerep6

J'ai bien compris vos explications. Je vais donc faire sans module.

@scherz0 :  j'ai testé ce que tu dis. J'ai donc créer le fichier rsyncd.conf dans mon répertoire personnel et ça fonctionne. En revanche, j'ai l'impression que rsync s'exécute alors avec les droits de l'utilisateur ssh car je n'ai pas le droit de chrooter, et les options uid, gid des modules de fonctionnent pas. Le gid et le uid des fichiers sont ceux de l'utilisateur ssh.

Merci à tous de votre aide.

----------

## scherz0

 *jerep6 wrote:*   

> @scherz0 :  j'ai testé ce que tu dis. J'ai donc créer le fichier rsyncd.conf dans mon répertoire personnel et ça fonctionne. En revanche, j'ai l'impression que rsync s'exécute alors avec les droits de l'utilisateur ssh car je n'ai pas le droit de chrooter, et les options uid, gid des modules de fonctionnent pas. Le gid et le uid des fichiers sont ceux de l'utilisateur ssh.

 

Ça établit une connexion via ssh et lance un serveur rsync "one shot", et évidement ce serveur a le même uid que le shell.  Pas de chroot non plus, bien sûr.

Tout est écrit dans le man, section "USING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION"   :Twisted Evil: 

----------

## jerep6

Honte à moi, je regardais les exemples de la section "UTILISER LES FONCTIONNALITÉS D'UN DÉMON RSYNC VIA UNE CONNEXION SHELL DISTANTE", mais je n'ai pas lu le préambule qui explique clairement la situation.

Merci encore.

----------

