Spécifier le fichier d'identité (id_rsa) avec rsync


197

Je dois effectuer des sauvegardes périodiques d'un répertoire sur un serveur distant qui est une machine virtuelle hébergée par une organisation de recherche. Ils exigent que l'accès aux machines virtuelles se fasse via des clés ssh, ce qui est tout à fait bien, sauf que je ne sais pas comment faire pointer rsync sur la clé ssh de ce serveur.

Rsync n'a pas de problème si le fichier de clé est ~/.ssh/id_rsa, mais quand c'est quelque chose d'autre que je reçois Permission denied (publickey).

Avec ssh, je peux spécifier le fichier d'identité avec -i, mais rsync ne semble pas avoir cette option.

J'ai également essayé de déplacer temporairement la clé sur la machine locale ~/.ssh/id_rsa, mais cela ne fonctionne pas non plus.

tl; dr

Pouvez-vous spécifier un fichier d'identité avec rsync?


1
Utile aussi pour faire sudo rsync, qui n'utilise pas ses propres clés ssh, pour une raison quelconque.
Ijoseph

1
@ijoseph Exactement, j'utilise rsync -aAP "sudo -u user ssh" user@server:dir local_dirpour la synchronisation de scripts cron qui s'exécutent en tant que root
Martin Pecka

Réponses:


342

Vous pouvez spécifier la commande ssh exacte via l'option '-e':

rsync -Pav -e "ssh -i $HOME/.ssh/somekey" username@hostname:/from/dir/ /to/dir/

De nombreux utilisateurs de ssh ne connaissent pas leur fichier ~ / .ssh / config. Vous pouvez spécifier les paramètres par défaut par hôte via le fichier de configuration.

Host hostname
    User username
    IdentityFile ~/.ssh/somekey

À long terme, il est préférable d’apprendre le fichier ~ / .ssh / config.


Cela ne m'aide pas d'avoir l'IdentityFile dans ssh_config. Je peux "ssh web1" sans problèmes, mais lorsque vous utilisez rsync sur web1: ... cela échoue avec "Permission denied (publickey)".
Zitrax

1
Essayez de rendre verbeux le transport ssh: rsync -e 'ssh -vv' web1: / etc / issue / tmp / issue
Dan Garthwaite

1
Ah Si vous automatisez ceci et ne pourrez pas fournir de mot de passe, vous aurez besoin d'une clé ssh supplémentaire sans mot de passe configurée aux deux extrémités. Si vous souhaitez que rsync fonctionne sans mot de passe dans une session interactive, vous devez utiliser ssh-agent.
Dan Garthwaite

16
Duuuuuuude! le ~/.ssh/configfichier - vous m'avez ouvert un nouvel univers!
Demaniak

2
~ / .ssh / config m'a sauvé la journée, merci beaucoup.
Smishra

17

Cela peut être fait avec la configuration d'utilisateur SSH, voir: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ fondamentalement, éditez ~ / .ssh / config:

$ nano ~/.ssh/config
#Add Hosts below 
Host server1
HostName examplehost.com
User username
Port 22
IdentityFile /path/to/key

$ rsync -e ssh /home/user/directory user@remote.host.net:home/user/directory/

Cela devrait fonctionner pour tout programme utilisant SSH, rsync,



4

FYI:

1) La clé publique se trouve toujours dans le répertoire de base de l’utilisateur se connectant au serveur distant, c’est-à-dire que si vous vous connectez en tant que "sauvegarde", elle se trouve dans /home/backup/.ssh/authorized_keys. L'identifiant de l'utilisateur lorsque vous vous connectez définit la clé publique utilisée sur la destination.

Vous pouvez choisir l'ID utilisateur lors de la connexion de deux manières différentes:

ssh user_id@destination.server
or
ssh -l user_id  destination_server     (<-- that is lower case "L")

D'un autre côté, la clé privée est similaire dans le répertoire utilisateur à moins que vous ne la remplaciez comme décrit dans la réponse de Dan.

2) À des fins de sauvegarde, il peut être souhaitable de créer une clé restreinte, limitée à l’exécution d’une seule commande telle que "rsync". Il y a une bonne description à propos de celle liée à la sauvegarde "rsnapshot" qui vous permet de sauvegarder à distance tout le serveur en utilisant un compte utilisateur non privilégié et "sudo":

"rsnapshot" howto

Rsnapshot peut facilement sauvegarder un ensemble de serveurs distants ou locaux, ce qui en fait un serveur de sauvegarde programmé et centralisé très pratique.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.