Problema: tengo que lanzar una orden scp para copiar el contenido de un directorio en un servidorA a la misma ruta en el servidorB. Para ello, me conecto desde el PC de casa al servidorA por ssh y lanzo la orden. El problema radica en que no quiero dejar la terminal abierta en el ordenador de casa. Lo que quiero es darle la orden al servidorA y desconectar. Esto se puede hacer precediendo la orden con un nohup por delante y dejándolo en segundo plano… ¡pero scp pide password! Y si está en segundo plano no lo puedo teclear o_O
Solución: usar claves ssh (ssh-keys), de tal forma que se copia la clave ssh pública en el servidorB y a partir de ahi éste no le pedirá password al usuario conectándose desde servidorA. Ésto se puede hacer y no es demasiado complicado (en resumidas cuentas, se crea una pareja de clave pública-clave privada, se sube la clave pública al servidor B y se da la orden de aceptar al cliente que tenga la clave privada correspondiente, sin necesidad de password), pero me gustaría hacerlo de forma más sencilla, sin claves ssh ni necesidad de más configuraciones. Ésto último también se puede hacer, con screen, esa gran aplicación que poco o nada veo usar a la gente.
Recordemos el problema: quiero conectarme a servidorA y lanzar desde ahí una orden scp para copiar una serie de archivos de servidorA a servidorB. La copia de archivos durará mucho tiempo y no quiero tener la conexión abierta durante todo ese rato. El problema es: si corto la conexión, el scp se para. Para que no se pare, podría usar «nohup scp … &», pero scp pide password, y al lanzarlo en segundo plano (con &), no puedo teclearlo.
Así que vamos al grano, usaremos screen, así:
$ screen $ lanzo la orden scp |
Salgo de screen, pero dejando la sesión abierta. ¿Cómo? Pulsando ctrl+a y luego d .
Ahora puedo cerrar la conexión ssh con serverA cuando quiera.
La próxima vez que conecte por ssh contra serverA puedo retomar la sesión que inicié con screen y ver cómo ha ido evolucionando. Para retomar la sesión, tecleamos:
$ screen -r |
Parece más complejo de lo que es. Símplemente toma nota de este post para cuando lo necesites 😉
¿Y no puedes simplemente mandar el scp a segundo plano *tras* haber tecleado la clave? En vez de ejecutar:
% scp blah &
puedes ejecutar:
% scp blah
[meter password]
Ctrl-D
bg
% exit
Tambien podes hacer la clave publica y privada
y con esto:
eval `ssh-agent` && ssh-add && screen
levantas el agente, agregas la clave y todas las ventanas que armes con el screen se pueden conectar a los servidores en donde este tu clave publica sin necesidad de re-tipear la passphrase si decidiste usar una.
despues con screen -r solo ya retomas la sesion.