clave - cómo pasar la contraseña para el comando rsync ssh
rsync remoto (11)
Necesito hacer rsync por ssh y quiero hacerlo automáticamente sin necesidad de pasar la contraseña para ssh manualmente.
Aunque ya lo hayas implementado,
también puede usar cualquier implementación de expect (encontrará alternativas en Perl, Python: pexpect, paramiko, etc.)
Automáticamente ingrese la contraseña para el comando rsync es difícil. Mi solución simple para evitar el problema es montar la carpeta de la que se realizará la copia de seguridad. Luego use un comando rsync local para hacer una copia de seguridad de la carpeta montada.
mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp
Debe usar un archivo de claves sin frase de contraseña para los inicios de sesión ssh scripted. Esto es obviamente un riesgo de seguridad, tenga cuidado de que el archivo clave esté adecuadamente asegurado.
Otra posibilidad interesante: 1. generar el par de claves RSA o DSA (como se describió) 2. poner la clave pública en el servidor (como ya se describió) 3. ejecutar:
rsync --partial --progress --rsh="ssh -i dsa_private_file" host_name@host:/home/me/d .
Nota: -i dsa_private_file que es su clave privada RSA / DSA
Básicamente, este enfoque es muy similar al descrito por @Mad Scientist, sin embargo, no tiene que copiar su clave privada a ~ / .ssh. En otras palabras, es útil para tareas ad-hoc (acceso de una sola vez sin contraseña)
Puede evitar la solicitud de contraseña en el comando rsync configurando la variable de entorno RSYNC_PASSWORD en la contraseña que desea usar o utilizando la opción --password-file.
Si no puede usar una clave pública / privada, puede usar 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
Deberá reemplazar SRC y DEST con los parámetros de fuente y destino rsync normales, y reemplazar PASS con su contraseña. ¡Solo asegúrese de que este archivo esté almacenado de forma segura!
Siguiendo la idea publicada por Andrew Seaford, esto se hace usando sshfs:
echo "SuperHardToGuessPass:P" | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin
rsync -a /mnt/source-tmp/ /media/destination/
umount /mnt/source-tmp
Use la utilidad del proveedor de contraseñas sshpass "no interactiva ssh password"
En Ubuntu
sudo apt-get install sshpass
Comando para rsync
/usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" src_path dest_path
Utilizo un archivo VBScript para hacer esto en la plataforma Windows, me sirve muy 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}"
el siguiente funciona para mi
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
Tuve que instalar sshpass
usa una clave ssh:
mira ssh-keygen y ssh-copy-id .
Después de eso, puedes usar un rsync de esta manera:
rsync -a --stats --progress --delete /home/path server:path