Réponses:
Vous devez utiliser un fichier de clés sans mot de passe pour les connexions ssh scriptées. Il s'agit évidemment d'un risque de sécurité, veillez à ce que le fichier de clés lui-même soit correctement sécurisé.
ssh -i
devrait toujours être possible du côté client. Voulez-vous dire que le serveur peut ne pas prendre en charge tous les types de clés (par exemple ECDSA)? Ce ne serait cependant pas un problème majeur, juste un cas d'utilisation ssh-keygen -t
. Est-ce que je manque quelque chose?
rsync -e
etssh -i
.
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
sshpass -p`cat .password` ssh [...]
. Protégez ensuite votre .password
fichier chmod 400 .password
pour vous assurer que seul votre utilisateur peut le lire.
src_path
devrait être server: path, comme ceci:server01.mydomain.local:/path/to/folder
-a
commutateur sur rsync inclut -rlptgoD
, vous pouvez raccourcir la commande comme ceci:rsync -az ...
Vous pouvez éviter l'invite de mot de passe sur la rsync
commande en définissant la variable d'environnementRSYNC_PASSWORD
sur le mot de passe que vous souhaitez utiliser ou en utilisant l' --password-file
option.
Si vous ne pouvez pas utiliser de clés publiques / privées, 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 normaux, et remplacer PASS par votre mot de passe. Assurez-vous simplement que ce fichier est stocké en toute sécurité!
Red Hat Enterprise Linux Server release 5.11 (Tikanga)
Je l'ai fait fonctionner comme ceci:
sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir remote_user@remote_host:/remote_dir
remote_port_ssh
réglage? Cela ressemble à un espace réservé pour une valeur réelle.
Utilisez une clé ssh.
Regardez ssh-keygen
etssh-copy-id
.
Après cela, vous pouvez utiliser de rsync
cette façon:
rsync -a --stats --progress --delete /home/path server:path
Une autre possibilité intéressante:
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, mais 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 unique sans mot de passe)
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
Il est difficile de saisir automatiquement le mot de passe de la commande rsync. Ma solution simple pour éviter le problème est de monter le dossier à sauvegarder. Utilisez ensuite une commande rsync locale 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
Bien que vous l'ayez déjà implémenté maintenant,
vous pouvez également utiliser n'importe quelle implémentation expect (vous trouverez des alternatives en Perl, Python: pexpect, paramiko, etc.)
J'utilise un fichier VBScript pour faire cela sur la plate-forme Windows, il me serveur très bien.
set shell = CreateObject("WScript.Shell")
shell.run"rsync -a Name@192.168.1.100:/Users/Name/Projects/test ."
WScript.Sleep 100
shell.SendKeys"Your_Password"
shell.SendKeys "{ENTER}"
La solution officielle (et d'autres) étaient incomplètes lors de ma première visite, alors je suis revenu, des années plus tard, pour publier cette approche alternative au cas où d'autres se retrouveraient ici dans l'intention d'utiliser une paire de clés publique / privée:
Exécutez ceci à partir de la machine de sauvegarde cible, qui extrait de la sauvegarde source vers la sauvegarde cible
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' user@10.9.9.3:/home/user/Server/ /home/keith/Server/
Exécutez cela à partir de la machine source, qui envoie de la source à la sauvegarde cible
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ user@10.9.9.3:/home/user/Server/
Et, si vous n'utilisez pas un autre port pour ssh, considérez les exemples les plus élégants ci-dessous:
Exécutez ceci à partir de la machine de sauvegarde cible, qui extrait de la sauvegarde source vers la sauvegarde cible:
sudo rsync -avi --delete user@10.9.9.3:/var/www/ /media/sdb1/backups/www/
Exécutez ceci à partir de la machine source, qui envoie de la source à la sauvegarde cible:
sudo rsync -avi --delete /media/sdb1/backups/www/ user@10.9.9.3:/var/www/
Si vous êtes toujours invité à entrer un mot de passe, vous devez vérifier votre configuration ssh /etc/ssh/sshd_config
et vérifier que les utilisateurs de la source et de la cible ont chacun la clé ssh publique respective des autres en envoyant chacun avecssh-copy-id user@10.9.9.3
.
(Encore une fois, c'est pour utiliser des paires de clés ssh sans mot de passe, comme une approche alternative, et non pour passer le mot de passe via un fichier.)
Suivant l'idée publiée par Andrew Seaford, cela se fait en utilisant sshfs:
echo "SuperHardToGuessPass:P" | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin
rsync -a /mnt/source-tmp/ /media/destination/
umount /mnt/source-tmp