web-dev-qa-db-fra.com

Comment passer le mot de passe automatiquement pour la commande SSH de rsync?

J'ai besoin de faire rsync par ssh et je veux le faire automatiquement sans qu'il soit nécessaire de passer le mot de passe pour ssh manuellement.

96
liysd

Vous devez utiliser un fichier de clé sans phrase secrète pour les connexions ssh scriptées. Ceci est évidemment un risque pour la sécurité, veillez à ce que le fichier de clés lui-même soit correctement sécurisé.

Instructions pour configurer un accès ssh sans mot de passe

43
Mad Scientist

Utilisez l'utilitaire de fournisseur de mot de passe ssh non interactif "sshpass"

Sur Ubuntu

 Sudo apt-get install sshpass

Commande à rsync

 /usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" src_path  dest_path
85
Rajendra

Vous pouvez éviter l'invite password password rsync en définissant la variable d'environnement RSYNC_PASSWORD sur le mot de passe que vous souhaitez utiliser ou en utilisant l'option --password-file.

24
Dexter

Si vous ne pouvez pas utiliser de clé publique/privée, vous pouvez utiliser expect:

#!/usr/bin/expect
spawn rsync SRC DEST
expect "password:"
send "PASS\n"
expect eof
if [catch wait] {
    puts "rsync failed"
    exit 1
}
exit 0

Vous devrez remplacer SRC et DEST par vos paramètres de source et de destination rsync habituels et remplacer PASS par votre mot de passe. Assurez-vous simplement que ce fichier est stocké de manière sécurisée!

12
kainjow

Utilisez une clé ssh.

Regardez ssh-keygen et ssh-copy-id.

Après cela, vous pouvez utiliser un rsync de cette façon:

rsync -a --stats --progress --delete /home/path server:path
7

Une autre possibilité intéressante:

  1. générer une paire de clés RSA ou DSA (comme cela a été décrit)
  2. mettre la clé publique à l'hôte (comme cela a déjà été décrit)
  3. courir:
 rsync --partial --progress --rsh = "ssh -i dsa_private_file" nom_hôte @ hôte:/home/me/d. 

Remarque: - i dsa_private_file qui est votre clé privée RSA/DSA

Fondamentalement, cette approche est très similaire à celle décrite par @Mad Scientist, cependant vous n’avez pas à copier votre clé privée dans ~/.ssh. En d'autres termes, il est utile pour les tâches ad-hoc (accès sans mot de passe une fois)

6
xhudik

Je travaille donc:

sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir  remote_user@remote_Host:/remote_dir
5
andrey465

Bien que vous l'ayez déjà implémenté maintenant,

vous pouvez aussi utiliser n'importe quelle implémentation attendue (vous trouverez des alternatives en Perl, Python: pexpect, paramiko, etc.)

3
Joao Figueiredo

La saisie automatique du mot de passe pour la commande rsync est difficile. Ma solution simple pour éviter le problème est de monter le dossier à sauvegarder. Utilisez ensuite une commande locale rsync pour sauvegarder le dossier monté.

mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp
3
Andrew Seaford

Ce qui suit fonctionne pour moi:

SSHPASS='myPassword'
/usr/bin/rsync -a -r -p -o -g --progress --modify-window=1 --exclude /folderOne -s -u --rsh="/usr/bin/sshpass -p $SSHPASS ssh -o StrictHostKeyChecking=no -l root"  source-path  myDomain:dest-path  >&2

Je devais installer sshpass

3
mario

J'utilise un fichier VBScript pour cela sur la plate-forme Windows, cela me sert très bien.

set Shell = CreateObject("WScript.Shell")
Shell.run"rsync -a [email protected]:/Users/Name/Projects/test ."
WScript.Sleep 100
Shell.SendKeys"Your_Password"
Shell.SendKeys "{ENTER}"
2
joseph.smeng

La solution officielle (et les autres) étaient incomplètes lors de ma première visite. Je suis donc revenu, des années plus tard, pour publier cette approche alternative au cas où d'autres personnes arriveraient ici avec l'intention d'utiliser une paire de clés publique/privée:

Exécutez ceci à partir de la machine de sauvegarde cible, qui passe de la sauvegarde source à la sauvegarde cible.

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' [email protected]:/home/user/Server/ /home/keith/Server/

Exécutez ceci à partir de la machine source, qui envoie la sauvegarde source à la sauvegarde cible.

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ [email protected]:/home/user/Server/

Et, si vous n'utilisez pas de port alternatif pour ssh, considérez les exemples plus élégants ci-dessous:

Exécutez ceci à partir de la machine de sauvegarde cible, qui passe de la sauvegarde source à la sauvegarde cible:

Sudo rsync -avi --delete [email protected]:/var/www/ /media/sdb1/backups/www/

Exécutez ceci à partir de la machine source, qui envoie la sauvegarde source à la sauvegarde cible:

Sudo rsync -avi --delete /media/sdb1/backups/www/ [email protected]:/var/www/

Si vous êtes toujours invité à entrer un mot de passe, vous devez vérifier votre configuration ssh dans /etc/ssh/sshd_config et vérifier que les utilisateurs de source et de cible possèdent chacun la clé publique ssh des autres en les envoyant avec ssh-copy-id [email protected].

(Encore une fois, c'est pour utiliser des paires de clés ssh sans mot de passe, en tant qu'approche alternative, et non pour passer le mot de passe via un fichier.)

1
oemb1905