Cela me semble très délicat.
J'ai configuré mes deux systèmes afin que je puisse rsync
fichiers entre eux comme moi, sans spécifier de mot de passe. Maintenant, le problème concerne les fichiers rsync
qui appartiennent à root
. Sur les deux systèmes, il n'y a pas de mots de passe racine. La seule façon de devenir root est via sudo
. Je ne peux donc pas donner un mot de passe pour sudo rsyn local root@remote:
ne pas utiliser mon ssh-agent pour fournir une phrase de passe. Je ne veux pas configurer un mot de passe root sur aucun système; Et j'ai besoin des fichiers qui appartiennent à root sur les deux systèmes.
EDIT : L'utilisation des fichiers appartenant à root
est juste un exemple. J'ai besoin d'un moyen pour que mon compte non-privilégié puisse lire facilement les fichiers système (y compris les racines). Un exemple est de copier mon environnement racine / racine dans le système nouvellement installé. Les deux systèmes sont en fait deux machines virtuelles sous un seul hôte, donc il ne me préoccupe pas beaucoup de copier les fichiers racine entre eux.
EDIT 2 : Si je veux seulement copier mon environnement racine / racine dans le système récemment installé, je peux utiliser le bit:
sudo tar cvzf - /root | ssh me@remote sudo tar xvzf - -C /
Mais j'ai besoin de rsync
pour le mettre à jour de temps en temps. Un moyen facile de le faire?
EDIT 3: formuler formellement la question
D'accord, tout a commencé avec la question, comment rsync
fichiers qui appartiennent à la racine entre deux systèmes en tant qu'utilisateur non privilégié normal, sans spécifier de mot de passe, sous la condition que,
root
est bloqué sur les deux systèmes. C'est-à-dire, il n'y a pas de mot de passe root
. La seule façon de devenir root est via sudo
(pratique de sécurité recommandée, voir http://help.ubuntu.com/community/RootSudo ) sudo
complètement sans mot de passe mais je ne veux pas non plus taper des mots de passe. Merci
La solution.
rsyn ... root@remote:...
fonctionne. La partie difficile est d'obtenir sudo rsyn ...
travailler aussi. sudo rsyn ...
travail, il est nécessaire: en utilisant l'agent SSH pour l'authentification sudo, http://www.evans.io/posts/ssh-agent-for-sudo-authentication/ HTH
Une autre façon serait de créer un script .sh sur les deux serveurs, contenant vos scripts rsync.
Ensuite, exécutez-les via cronjob ou via ssh:
ssh not-your-root-user@remoteserver sudo sh your-rsync-script.sh
Ou exécutez simplement votre script rsync directement via ssh
ssh not-your-root-user@remoteserver sudo rsync local root@remote
Je préférerais cronjob si c'est un travail rsync programmé.
Bien, cela dépend de ce que vous voulez faire. Les fichiers doivent-ils appartenir à root sur les deux systèmes? Ils ne le feront pas si vous faites simplement une sauvegarde afin que vous puissiez simplement exécuter rsync
tant que root, mais ouvrir une session sur le serveur distant comme utilisateur normal.
Créez une clé pour que la root
locale se connecte en tant qu'utilisateur normal à distance (j'utiliserai xpt
comme nom d'utilisateur normal):
sudo -i ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub xpt@remote
Vous devriez maintenant pouvoir faire un ssh
ou rsync
mot de passe (en tant que root) comme tel:
rsync /path/to/local xpt@remote
Si les fichiers doivent appartenir à root sur les deux systèmes, les choses deviennent un peu plus complexes. La chose la plus simple à faire serait de configurer un mot de passe root sur les deux systèmes:
sudo -i passwd
Vous pouvez maintenant vous connecter en tant que contenu root to hearts.
Bien sûr, la meilleure chose à faire serait de ne pas copier des fichiers sur le réseau en tant que root . Je ne peux pas vraiment imaginer pourquoi vous voudriez et le risque ne vaut vraiment pas l'effort, il suffit de copier les fichiers et de jouer avec sudo
au besoin une fois qu'ils ont été copiés.
METTRE À JOUR:
Je répète que la façon la plus simple de le faire est de créer un mot de passe root pour chaque machine, puis de la copier en tant que root. Je ne comprends pas pourquoi vous ne voulez pas cela, il est aussi simple que d'exécuter sudo passwd
.
Quoi qu'il en soit, si vous insistez sur le fait que vous ne souhaitez pas créer de mot de passe root, la seule façon de voir ceci est que je peux lire deux commandes:
Exécutez rsync
pour copier dans un répertoire utilisateur inscriptible (j'utilise mktmp
pour créer un nom de répertoire aléatoire):
dir=`mktemp -u`; && sudo rsync -avz /root xpt@remote:$dir
Déplacez le contenu à remote:/root
ssh -t lacoloc@badabing sudo rsync -avz "$dir"/* /root
L'option -t
force l'attribution de tty et est nécessaire pour exécuter des commandes sudo
sur le système distant.
Vous pouvez combiner les deux en ajoutant ceci à votre fichier ~/.bashrc
(laissez-moi savoir si vous n'utilisez pas bash):
function Rrsync(){ dir=`mktemp -u` && sudo rsync -avz $1 $2:$dir && ssh -t $2 sudo rsync -avz $dir/ $3 && rm -rf $dir }
Vous pouvez alors appeler la fonction comme ceci:
Rrsync /root xpt@remote /root ------ ----- ---------- ----- | | | |---> The target directory on the remote server | | |------------> username@server | |--------------------> Path to local source directory |--------------------------> The function name
Gardez à l'esprit que vous devrez peut-être jouer avec l'ajout / suppression d'une barre oblique de retour /
de la source et des cibles rsync selon que vous copiez un répertoire ou le contenu du répertoire. Voir man rsync
.
Pour que cela fonctionne sans mot de passe, vous devrez exécuter ssh-keygen
et ssh-copy-id
tant que root comme je l'ai décrit au tout début. Vous devrez toujours entrer votre mot de passe pour les deux commandes sudo
, une fois pour votre machine locale et une fois pour la télécommande.
Vous pouvez le faire directement avec rsync avec une création utilisant l'option --rsync-path
. Donc, vous utiliserez:
rsync -a -e "ssh" --rsync-path="sudo rsync" localdir/ [email protected]:/remotedir
Notez que cela nécessite que "sudo rsync" sur l'hôte distant NE DEMANDE PAS la phrase secrète. Cela peut se faire de plusieurs façons:
sudo -v
sur la télécommande avant d'exécuter rsync (idéal pour les travaux rsync uniques). Votre sudo ne doit pas utiliser l'option tty_tickets
pour que cela fonctionne. username ALL= NOPASSWD:/usr/bin/rsync
dans /etc/sudoers
sur un hôte distant. /etc/pam.d/sudo
Bien sûr, vous pouvez également, au lieu de "rsync over ssh", utiliser "rsync in daemon mode" (voir rsyncd.conf(5)
et /etc/default/rsync
sur Debian GNU / Linux par exemple) pour accomplir ce que vous voulez, avec Bénéfice supplémentaire d'une meilleure vitesse de transfert.