Impossible de faire fonctionner rsync en mode démon sur SSH

11

J'essaie de configurer rsync pour copier les données d'un serveur tous les jours. Afin de rendre le système aussi restreint que possible, j'essaie d'utiliser le mode décrit dans la page de manuel comme: "UTILISATION DES FONCTIONS RSYNC-DAEMON VIA UNE CONNEXION À DISTANCE"

J'ai donc mis un fichier appelé rsyncd.conf dans le dossier racine de root:

[root]
path = /
read only = true

et j'ai essayé de copier / etc / passwd comme test:

rsync -vv -e ssh myserver::root/etc/passwd .

Mais je reçois ce qui suit:

opening connection using: ssh myserver rsync --server --daemon . 
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.3]

La raison pour laquelle je fais tout cela est qu'une fois que je le fais fonctionner, je prévois de restreindre l'accès en spécifiant la commande

rsync --server --daemon .

dans ~ / .ssh / authorized_keys

rjmunro
la source
Qu'est-ce qui est connecté / var / log / secure ou / var / log / messages sur le serveur de réception?
Dave Cheney
C'était: rsync: impossible d'ouvrir le fichier de configuration "/etc/rsyncd.conf": Pas de fichier ou de répertoire (2) Merci, cela a conduit à une solution, que je posterai comme réponse.
rjmunro

Réponses:

11

Il semble y avoir un bug dans la documentation ou l'implémentation de rsync. l'homme rsync dit:

Rsync prend en charge la connexion à un hôte à l'aide d'un shell distant, puis la création d'un serveur «démon» à usage unique qui s'attend à lire son fichier de configuration dans le répertoire personnel de l'utilisateur distant.

mais lors de la connexion à root, selon / var / log / messages, il recherchait dans /etc/rsyncd.conf le fichier de configuration (l'emplacement standard pour un fichier rsyncd.conf lorsqu'il n'est pas utilisé sur SSH.

J'ai dû forcer le serveur ssh à utiliser le bon fichier de configuration en ajoutant

command="rsync --config=/root/rsyncd.conf --server --daemon ."

à /root/.ssh/authorized_keys.

La raison pour laquelle je n'ai pas simplement mis la configuration à l'emplacement par défaut est que je ne voulais pas que quelqu'un démarre accidentellement un démon rsync normal - je veux seulement qu'un démon ait autant d'accès quand il a la bonne clé ssh.

rjmunro
la source
5

rsync en mode démon n'est pas ce que je suggérerais si vous voulez le verrouiller le plus possible. Vous souhaitez restreindre la commande qu'une clé SSH est autorisée à exécuter et appeler la commande de copie à l'aide de cette clé.

Pour savoir à quelle commande restreindre la clé, exécutez la ligne de commande rsync appropriée avec une légère modification dans la commande ssh:

rsync -avz -e 'ssh -v' stuff somewhere:/place

Vous verrez une ligne dans la sortie de débogage telle que:

debug1: Sending command: rsync --server -vlogDtprze.iLs . /place

Cette commande exacte est ce que vous voulez restreindre la clé pour pouvoir l'exécuter dans .ssh / authorized_keys:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=
MikeyB
la source
3
Je veux pouvoir faire différentes sauvegardes en lecture seule de parties du système - par exemple, sauvegarder des bases de données e-mail et SQL tous les jours, mais d'autres choses une fois par semaine. J'aurais besoin d'une commande spécifique et d'une clé spécifique pour chaque sauvegarde possible, et je ne serais pas en mesure de faire des sauvegardes ad hoc supplémentaires avec la même infrastructure.
rjmunro
2
Assez juste - je prends "Afin de rendre le système aussi restreint que possible" littéralement :)
MikeyB
1
Vous pouvez placer plusieurs commandes dans un script et transmettre au script les paramètres en entrée de première ligne.
alecco
1
existe-t-il un moyen de générer la commande série sans avoir à passer par les informations de débogage? '-vlogDtprze.iLs'
qodeninja