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?

Jangari
la source
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.

Dan Garthwaite
la source
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 [email protected]:home/user/directory/

Cela devrait fonctionner pour tout programme utilisant SSH, rsync,

Cbaker510
la source
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 [email protected]
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.

ajaaskel
la source