Especifique el archivo de identidad (id_rsa) con rsync

200

Necesito hacer copias de seguridad periódicas de un directorio en un servidor remoto que es una máquina virtual alojada por una organización de investigación. Exigen que el acceso a las máquinas virtuales se realice a través de claves ssh, lo cual está bien, excepto que no puedo entender cómo apuntar rsync a la clave ssh para este servidor.

Rsync no tiene ningún problema si el archivo de clave es ~/.ssh/id_rsa, pero cuando es algo más, obtengo Permission denied (publickey).

Con ssh puedo especificar el archivo de identidad -i, pero rsync parece no tener esa opción.

También he intentado mover temporalmente la clave en la máquina local ~/.ssh/id_rsa, pero eso tampoco funciona.

tl; dr

¿Se puede especificar un archivo de identidad con rsync?

Jangari
fuente
1
Útil también para hacer sudo rsync, que por alguna razón no usa las propias teclas ssh.
ijoseph
1
@ijoseph Exactamente, lo uso rsync -aAP "sudo -u user ssh" user@server:dir local_dircuando sincronizo desde scripts cron que se ejecutan como root
Martin Pecka

Respuestas:

343

Puede especificar el comando ssh exacto a través de la opción '-e':

rsync -Pav -e "ssh -i $HOME/.ssh/somekey" username@hostname:/from/dir/ /to/dir/

Muchos usuarios de ssh no están familiarizados con su archivo ~ / .ssh / config. Puede especificar la configuración predeterminada por host a través del archivo de configuración.

Host hostname
    User username
    IdentityFile ~/.ssh/somekey

A la larga, es mejor aprender el archivo ~ / .ssh / config.

Dan Garthwaite
fuente
No me ayuda tener el IdentityFile en ssh_config. Puedo "ssh web1" sin problemas, pero cuando uso rsync para web1: ... falla con "Permiso denegado (clave pública)".
Zitrax
1
Intente aumentar la verbosidad del transporte ssh: rsync -e 'ssh -vv' web1: / etc / issue / tmp / issue
Dan Garthwaite
1
Ah Si está automatizando esto y no podrá proporcionar una contraseña, necesitará una clave ssh sin contraseña adicional configurada en ambos extremos. Si desea que rsync funcione sin contraseña en una sesión interactiva, deberá usar ssh-agent.
Dan Garthwaite
16
Duuuuuuude! el ~/.ssh/configarchivo: ¡abriste un nuevo universo para mí!
demaniak
2
~ / .ssh / config me salvó el día, muchas gracias.
smishra
17

Esto se puede hacer con la configuración de usuario SSH, consulte: http://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ básicamente edite ~ / .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/

Esto debería funcionar para cualquier programa que use SSH, rsync,

Cbaker510
fuente
4

FYI:

1) La clave pública siempre está en el directorio de inicio del usuario que inicia sesión en el servidor remoto, es decir, si inicia sesión como "copia de seguridad", se encuentra en /home/backup/.ssh/authorized_keys. La identificación de usuario cuando inicia sesión define la clave pública utilizada en el destino.

Puede elegir la ID de usuario cuando realiza la conexión de dos maneras diferentes:

ssh [email protected]
or
ssh -l user_id  destination_server     (<-- that is lower case "L")

Por otro lado, en su extremo, la clave privada está de manera similar en la referencia del usuario a menos que la anule como se describe en la respuesta de Dan.

2) Para fines de respaldo, puede ser conveniente crear una clave restringida que se limite a ejecutar solo un comando como "rsync". Hay una buena descripción acerca de eso relacionado con la copia de seguridad "rsnapshot" que le permite hacer una copia de seguridad remota de todo el servidor utilizando una cuenta de usuario no privilegiada y "sudo":

"rsnapshot" howto

Rsnapshot puede realizar fácilmente copias de seguridad de un grupo de servidores remotos o locales, lo que lo convierte en un práctico servidor de copias de seguridad centralizado y programado.

ajaaskel
fuente