Usando rsync con sudo en la máquina de destino

Respuestas:

68

En la máquina de destino

  1. Descubre el camino hacia rsync:which rsync
  2. Edite el /etc/sudoersarchivo: sudo visudo(vea también: ¿ debo usar visudo? )
  3. Agregue la línea <username> ALL=NOPASSWD:<path to rsync>, donde username es el nombre de inicio de sesión del usuario que rsync usará para iniciar sesión. Ese usuario debe poder usarsudo

Luego, en la máquina fuente, especifique que sudo rsyncse utilizará:

rsync ... --rsync-path="sudo rsync" ...

Usarlo sin la NOPASSWDmáquina de destino dará como resultado el mensaje

sudo: sin tty presente y sin programa askpass especificado

Thomas Weller
fuente
¿Cuál es la modificación de esto que permitiría a cualquier usuario en un grupo específico hacer esto? En lugar de <nombre de usuario> ¿hay una versión de <nombre de grupo>?
Brian
3
Gracias, solo uso pki, así que lo hice-e="ssh -i $PRIVATE_KEY_PATH" --rsync-path="sudo rsync"
AL
1
Por supuesto, <username> ahora puede leer / escribir todo como root usando rsync, localmente y de forma remota, por lo que la parte de no poder iniciar sesión como root debido a problemas de seguridad es algo discutible ... porque esencialmente lo está haciendo ahora. .
hmn
1
¿Sigue recibiendo el error "no hay presente ..." después de seguir estas instrucciones? Yo estaba. Asegurándome de que la línea que agregué /etc/sudoersaparece al final del archivo (o después de cualquier regla de grupo que pueda afectar al mismo usuario) resolvió el problema para mí.
CPBL
1
Estoy usando esta solución, pero me gustaría mejorar la seguridad al restringir los argumentos que el usuario puede pasar a rsync en el servidor de destino. Por lo general, limitaría los args con los que se puede usar, <username> ALL=NOPASSWD:<path to rsync> <args>pero no sé cuáles serían los args cuando se llama de forma remota de esta manera. ¿Algunas ideas?
Pete Cornell
3

Puede hacer que el sudo remoto le pida su contraseña a través de X-windows. Aquí hay una manera de hacer eso:

  1. Asegúrese de que ssh-askpassesté instalado en el host remoto (y de que está utilizando X-windows, por supuesto)
  2. Asegúrese de que esto esté en /etc/sudo.conf:
# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass
  1. Agregue estas opciones a rsync: -e "ssh -X" --rsync-path="sudo -A rsync"

    • ssh -X reenviará la información de X-windows y el puerto a su sesión remota
    • sudo -A hará que sudo use ssh-askpass para pedirle su contraseña
Bill Burdick
fuente
Funciona en Ubuntu 18; crear /etc/sudo.conf (si aún no existe) en el destino m / c
Snidhi Sofpro
0

Mi solución es usar --rsync-path="sudo rsync", si solicita una contraseña, puede usar una solución como esta:

rsync -avz --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync"  [email protected]:/ .

Pero esto no es seguro para poner una contraseña en la línea de comando.

Bulat
fuente