2010-04-21 33 views
10

Me gustaría automatizar la tarea de rsync como un trabajo de cron. Como necesita la frase de contraseña, no puedo hacer el cronjob. Necesito especificar la frase de contraseña junto con el comando rsync o guardaré la frase de contraseña en un archivo y leeré desde allí. Mi comando se verá así:Cómo automatizar rsync sin solicitar la solicitud de contraseña

rsync -aPe "ssh -i ' . $server->{'ssh_key'} . '" ' . $server_lock_dir; 

Entonces, ¿dónde pongo la contraseña?

+1

Pertenece en superuser.com –

Respuesta

14

No necesita hacer eso, solo necesita configurar un par de claves ssh y colocar la clave pública en el directorio .ssh del sistema remoto.

A continuación, sólo hace esto:

rsync -a -e ssh /local/path/ server:/remote/path/ 

(Tenga en cuenta que -e ssh ha sido el valor predeterminado para un buen número de años, por lo que probablemente puede omitirla, a menos que estés usando una versión muy antigua.)

Hay una guía de "cómo hacerlo" para configurar las teclas here.

+0

El PO se menciona el uso de un sshkey con una frase de contraseña ¿De qué manera. esto soluciona la entrada de frase de contraseña? – ricosrealm

+0

La mayoría de las guías recomiendan crear las claves sin una frase de contraseña. – SDsolar

5

Si quieres que esto funcione desde cron, tiene varias posibilidades:

  • configuración claves ssh sin contraseña - no muy seguro de claves SSH sin contraseña
  • de configuración, pero combinarlos con ssh ForceCommand en el archivo authorized_keys para limitar los comandos que se pueden ejecutar con esa clave ssh. Consulte man sshd, google en "ssh ForceCommand"
  • configure las claves ssh aprobadas, pero combínelas con el llavero para mantener la clave en la memoria entre las sesiones. He escrito un post sobre esto: ssh, ssh-agent, keychain and cron notes
4

Si desea copiar archivos de forma remota:

  1. Asegúrese de que tiene una clave pública en su máquina local que puede iniciar sesión en la máquina remota. (en este caso el de mi ssh-clave es "/home/myaccount/.ssh/id_rsa"
  2. Especificar carpeta local que desea sincronizar con el mando a distancia, en mi caso "/ home/myaccount/mysourcefolder"
  3. Especificar la ruta completa de la carpeta de destino en el servidor remoto, en mi caso remoteaccount @ remoteserver: "/ home/remoteaccoun t/mydestinationfolder /"

Nota:

  • --progress es mostrar el progreso de cada archivo que está siendo copiado
  • -a para transferir recusively todos los archivos en el mysourcefolder
  • -v para verbosidad
  • -z para comprimir porciones de datos para archivos pequeños

Mi comando se parecerá a continuación:

rsync -avz --progress -e "ssh -i/home/myaccount /.ssh/id_rsa" /home/myaccount/mysourcefolder remoteaccount @ remoteserver: "/ home/remoteaccount/mydestinationfolder /"

+0

¿Cómo exactamente creó "/home/myaccount/.ssh/id_rsa" y qué está escrito allí? ¿Es la contraseña del servidor remoto en texto sin formato (sin cifrado)? No deseo que otros usuarios de mi computadora (incluido el administrador) puedan leer mi contraseña. – mcExchange

Cuestiones relacionadas