Tengo un archivo grande en el servidor one
y quiero copiarlo al servidor two
usando scp
. Tengo las claves configuradas correctamente y puedo enviar ssh / scp a ambos servidores desde mi escritorio.
El archivo que necesito copiar es más grande que el espacio libre en el disco duro de mi estación de trabajo, así que quería hacer:
scp one:/opt/bigfile.tar.gz two:/opt/bigfile.tar.gz
pero tengo:
ssh: Could not resolve hostname one: Name or service not known
No tenemos DNS aquí (no me preguntes por qué), así que tengo esto en mi ~ / .ssh / config:
Host one
Hostname <IP address of server one>
User jspurny
Host two
Hostname <IP address of server two>
User jspurny
Si intento con un archivo más pequeño y lo transfiero one
a mi estación de trabajo y luego a two
, funciona bien:
scp one:/opt/smallerfile.tar.gz .
scp smallerfile.tar.gz two:/opt/
Al usar direcciones IP directamente como se sugiere en el comentario, obtuve:
$ scp jspurny@<one's IP>:bigfile.tar.gz jspurny@<two's ip>:bigfile.tar.gz
Host key verification failed.
lost connection
No es un problema:
El tamaño no es un problema aquí, solo fue un "desencadenante" de este problema, ya que no había forma de almacenarlo bigfile.tar.gz
en mi estación de trabajo. El problema ocurre independientemente del tamaño del archivo.
Pregunta:
¿Por qué el comando:
scp oneremote:file secondremote:file
arroja un error independientemente de si usa .ssh/config
alias o directamente usando direcciones IP?
Resuelto, más o menos, aún en busca de explicación , he dividido el archivo grande en archivos más pequeños y los transferí uno por uno a través de mi estación de trabajo. Todavía me pregunto por qué no funcionó. Así que aún agradecería alguna explicación de lo que estaba mal ...
Encontré una razón por la que falla: parece que estaba siendo tonto. Yo pensaba que el comando
scp one:file two:file
estaba creando dos conexiones a cada servidor y luego recibía datos de uno e inmediatamente los enviaba a dos y así actuaba como un relé.
Claramente, este no es el caso, porque una -v
opción simple reveló que de hecho solo se conecta a uno y desde uno intenta conectarse a dos . Lo que obviamente no es posible porque se supone que el servidor uno no se conecta a dos .
Respuestas:
Tubo simple
Prueba esto:
El primero debe enviar el contenido del archivo a su máquina, mientras que el segundo debe enviarlo a la segunda máquina. Calcularía una suma de verificación en ambos extremos después de la transferencia, para asegurarme de que nada se pierda o se confunda en el camino.
Elaborados túneles
Para aplicaciones más elaboradas, puede usar túneles ssh. Por ejemplo, podría intentar algo como esto:
Luego puede abrir una conexión
one
allocalhost
puerto de la máquina5001
y se reenviará dos veces y terminará como una conexióntwo
allocalhost
puerto22
. Este es el puerto ssh, por lo que puede usarlo para otro scp, o para rsync, o lo que sea. También puede iniciar unrsync
servidortwo
y reenviar el puerto 873 en lugar del 22. O puede usarnc
ambos lados para transferir datos sin procesar, utilizando un número de puerto arbitrario.El principal beneficio entre el enfoque anterior es que tiene una conexión tcp bidireccional entre las dos máquinas, en lugar de una tubería unidireccional solamente. De esa manera, las dos partes pueden intercambiar información, lo cual es particularmente importante en el
rsync
caso.fuente
El crédito completo para esta respuesta va a /superuser//a/602436/142948
Necesitas la
-3
opción para scp:http://www.openbsd.org/cgi-bin/man.cgi?query=scp&sektion=1
De lo contrario, el segundo alias "dos" se resuelve en el host "uno" , que puede no existir.
fuente
Puesto que usted tiene acceso del usuario al servidor de origen (uno) por qué no login y ejecutar el comando scp en ese servidor directamente ... Si le preocupa que se tardará demasiado tiempo, a continuación, iniciar el comando dentro de una
screen
continuación, desprenderse de la pantalla conCtrl+a d
y déjalo correr.Sin embargo, si debe hacer esto desde su estación de trabajo, y las claves SSH desde el servidor de origen al de destino funcionan bien, envíe el
scp
comando como el parámetro de unssh
comando, como:fuente
Buscando el mensaje de error: "Falló la verificación de la clave del host". parece ser lo más sencillo que hacer aquí. Encontré este Q&A en askubuntu titulado: Problema de conexión SSH con error "Error de verificación de clave de host ..." .
Una de las respuestas a esas preguntas y respuestas sugirió que el problema radicaba en una entrada en conflicto en su
~/.ssh/known_hosts
archivo. Puede eliminar las entradas problemáticas de ese archivo usando cualquier editor de texto o puede usar este comando para eliminar entradas:¿Dónde
hostname
estaría la dirección IP o el nombre del servidor desde el que intenta conectarse? Todo lo anterior estaría en el host dos por cierto.fuente
one
ytwo
servidores desde mi estación de trabajo sin ningún problema ... el problema comienza cuando ejecutoscp one:file two:file
desde la estación de trabajo. Y no hay ningúnknown_hosts
archivo en uno o dos . Acabo de intentar eliminar las claves de dos (incluso para un solo para estar seguros) en mi estación de trabajo, pero nada cambió (a excepción de que son Y seguro / n propt).scp workstation:file one:file
yworkstation:file two:file
? Obviamente no tiene que decir "estación de trabajo: archivo". Solo lo digo explícitamente por el bien de la conversación.workstation$ scp one:file file
yworkstation$ scp file two:file
. De todos modos, creo que lo he resuelto. Lo agregaré como mi propia respuesta.