web-dev-qa-db-fra.com

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

J'ai besoin de faire des sauvegardes périodiques d'un répertoire sur un serveur distant qui est une machine virtuelle hébergée par un organisme de recherche. Ils exigent que l'accès aux machines virtuelles se fasse via des clés ssh, ce qui est très bien, sauf que je ne peux pas comprendre comment pointer rsync vers la clé ssh pour ce serveur.

Rsync n'a aucun problème si le fichier de clé est ~/.ssh/id_rsa, Mais quand c'est autre chose, j'obtiens Permission denied (publickey).

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

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

tl; dr

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

224
Jangari

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.

385
Dan Garthwaite

Cela peut être fait avec la configuration utilisateur SSH voir: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ modifier essentiellement ~/.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,

17
Cbaker510

Pour moi, il suffisait de démarrer l'agent ssh comme suit:

eval `ssh-agent -s`
ssh-add /path/to/mykey

Voir aussi une réponse plus longue ici https://stackoverflow.com/questions/17846529/could-not-open-a-connection-to-your-authentication-agent

8
pietro

Pour info:

1) La clé publique est toujours dans le répertoire personnel de l'utilisateur qui se connecte 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'ID 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é, de votre côté, la clé privée se trouve de la même manière dans l'hôte de l'utilisateur, sauf si vous la remplacez comme décrit dans la réponse de Dan.

2) À des fins de sauvegarde, il peut être souhaitable de créer une clé restreinte qui est limitée à exécuter une seule commande comme "rsync". Il y a une bonne description de celle liée à la sauvegarde "rsnapshot" qui vous permet de sauvegarder à distance le serveur entier en utilisant un compte utilisateur non privilégié et "Sudo":

"rsnapshot" howto

Rsnapshot peut facilement sauvegarder un groupe de serveurs distants ou locaux, ce qui en fait un serveur de sauvegarde planifié et centralisé pratique.

4
ajaaskel