¿Cómo se usa un archivo de identidad con rsync?

125

¿Cómo se usa un archivo de identidad con rsync?

Esta es la sintaxis que creo que debería usar con rsync para usar un archivo de identidad para conectarme:

rsync -avz -e 'ssh -p1234 -i ~ / .ssh / 1234-identity' \
"/ local / dir /" [email protected]: "/ remote / dir /"

Pero me está dando un error:

Advertencia: archivo de identidad ~ / .ssh / 1234-identidad no accesible: no existe tal archivo o directorio.

El archivo está bien, los permisos están configurados correctamente, funciona al hacer ssh, pero no con rsync, al menos en mi sintaxis. ¿Qué estoy haciendo mal? ¿Intenta buscar el archivo de identidad en la máquina remota? Si es así, ¿cómo especifico que quiero usar un archivo de identidad en mi máquina local ?

cwd
fuente

Respuestas:

86

Es posible que desee usar ssh-agenty ssh-addcargar la clave en la memoria. sshintentará las identidades de ssh-agent automáticamente si puede encontrarlas. Los comandos serían

eval $(ssh-agent) # Create agent and environment variables
ssh-add ~/.ssh/1234-identity

ssh-agentes un demonio de usuario que contiene claves ssh sin cifrar en la memoria. ssh lo encuentra en función de las variables de entorno que ssh-agent genera cuando se ejecuta. El uso evalpara evaluar esta salida crea las variables de entorno. ssh-addes el comando que administra la memoria de teclas. El agente puede bloquearse usando ssh-add. Se puede especificar un tiempo de vida predeterminado para una clave cuando se inicia ssh-agent, o se puede especificar una clave cuando se agrega.

También es posible que desee configurar un archivo ~ / .ssh / config para proporcionar el puerto y la definición de clave. (Ver `man ssh_config para más opciones).

host 22.33.44.55
    IdentityFile ~/.ssh/1234-identity
    Port 1234

Si se cita el comando ssh, se evitará la expansión de shell que se necesita para ~o $HOME. Puede usar la ruta completa o relativa a la clave entre comillas simples.

BillThor
fuente
2
Las comillas dobles y el uso de $ HOME resolvieron mi problema. ¿Puedes explicar qué están haciendo los dos primeros comandos? Ya estaba familiarizado con la configuración de un archivo de configuración; el único problema es cuando tengo varias cuentas en un servidor. No espero que me permita especificar múltiples archivos de identidad para el mismo host.
cwd
+1 Esto solucionó mi problema con drone.io :) Muchas gracias.
Bhargav Nanekalva
Esto es jodidamente increíble. FTR, también puede especificar el nombre de usuario predeterminado para conectarse, por ejemplo, User ubuntual configurar una instancia de Ubuntu EC2 :) ¡Gracias!
DanielSmedegaardBuus
Si está utilizando csh style shell (como fish), entonces hágaloeval (ssh-agent -c)
Dave
77

Utilizar cualquiera $HOME

rsync -avz -e "ssh -p1234  -i \"$HOME/.ssh/1234-identity\"" dir remoteUser@server:

o ruta completa a la clave:

rsync -avz -e "ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:

Probado con rsync 3.0.9 en Ubuntu

Tombart
fuente
3
Sí, esto funciona bien, no es necesario usar ssh-agent u otras opciones de configuración.
Laurent
2
+1: este es un problema global, como si no pudieras hacer "ls '~'"
Alex
$HOMEno funcionará dentro de comillas simples (sin expansión variable), por lo que debe usar comillas dobles o la ruta absoluta.
Anol
en Bash estándar debería funcionar "$HOME"o $HOMEsin ninguna diferencia (también "${HOME}"es posible, si quieres complicarlo)
Tombart
He cambiado las comillas simples a dobles.
Steve Bennett
36

Debe especificar la ruta absoluta a su archivo de clave de identidad. Esto probablemente sea una especie de peculiaridad en rsync. (no puede ser perfecto después de todo)

Me encontré con este problema hace solo unos días :-)

Alpha01
fuente
Puede usar ~ pero no puede incrustarlo entre comillas simples, porque entonces no se sustituye correctamente por / home / username / debe usar comillas dobles para que funcione correctamente, vea la solución de @ilcavero
X Tian
24

Esto funciona para mi

rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
"/local/dir/" [email protected]:"/remote/dir/"
ilcavero
fuente
2
Por alguna razón, tuve que especificar la ruta completa al archivo de identidad, es decir /home/user/.ssh/1234-identity. Entonces funcionó. Posiblemente porque es entonces un caparazón diferente, como se sugiere en la respuesta de Darhuuk.
osa
@osa me salvaste allí! Estaba teniendo un problema con Drupal y rSYNC y el problema era el camino ... raro.
Lee Woodman
6

¿Estás ejecutando el comando en bash o sh? Esto puede hacer la diferencia. Intenta reemplazar ~con $HOME. Intente entrecomillar la cadena para la -eopción.

Darhuuk
fuente
6

use el archivo de clave con rsync:

rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ [email protected]:/var/www/test
Avinash Raut
fuente