Tenemos dos entornos principales en cuestión:
Desarrollo y QA
Cada entorno tiene dos servidores:
- Jump Box
- Servidor de aplicaciones
Para conectarse al servidor de aplicaciones, primero debe conectarse al cuadro de salto, y luego SSH al servidor de aplicaciones.
Hay algunas reglas establecidas por cortesía del firewall:
- DEBE conectarse al servidor de aplicaciones a través de la caja de salto
- El servidor de aplicaciones no puede conectarse a ninguno de los cuadros de salto
- Los cuadros de salto están en la misma subred y PUEDEN hablar entre ellos.
Nuestro problema
Tenemos mucho contenido (670 GB) en el DEVELOPMENT APPLICATION SERVER
, y necesitamos llevar esto al QA APPLICATION SERVER
.
Copiar estos datos en los cuadros de salto no es una opción porque carecen de la cantidad de espacio requerida.
Investigué un poco y aprendí que potencialmente podríamos hacer una serie de túneles a través de estos servidores para poder transmitir los datos directamente de un servidor de aplicaciones a otro a través de los túneles. Sin embargo, el problema es que no podemos conectarnos a la caja de salto desde el servidor de aplicaciones.
¿Tenemos alguna opción? Esto se está convirtiendo en una situación desesperada, y el tiempo es esencial. No tenemos tiempo para descargar los datos y volver a cargarlos. La copia a través de la red en los servidores se realizará rápidamente, ya que es una conexión gigabit.
fuente
Respuestas:
Con mucho, la forma más fácil es simplemente copiarlo a través de scp. Además, esta sintaxis en realidad funciona a diferencia de algunas de las otras sugerencias.
No se puede superar esta sintaxis por facilidad. Le permite copiar recursivamente, rsync o lo que quiera sin la molestia de considerar tuberías potencialmente complejas. Esta sintaxis es intuitivamente clara, será más fácilmente compatible con los administradores del sistema que lo siguen y no hace un uso inútil del gato .
Desde la página de manual de scp : las
-3
copias entre dos hosts remotos se transfieren a través del host local. Sin esta opción, los datos se copian directamente entre los dos hosts remotos. Tenga en cuenta que esta opción deshabilita el medidor de progreso.En el siguiente ejemplo
Aquí hay un archivo ~ / .ssh / config que configura el acceso directo desde su estación de trabajo a los servidores de aplicaciones a través del salto apropiado (también conocido como servidor de bastión).
Al probar la presencia del archivo en el servidor de destino, no estará allí.
Ahora copiemos un archivo del servidor de aplicaciones Dev a la aplicación QA a través de su estación de trabajo.
Ahora verifiquemos la presencia del archivo copiado en el QA Application Server. Estará allí esta vez.
Nota
Al cerrar una conexión de ProxyCommand, verá el mensaje de advertencia "Eliminado por la señal 1". Esto es SSH derribando la conexión ProxyCommand y no es motivo de alarma. Puede deshacerse de él agregando
LogLevel Quiet
a su stanza de configuración de host de bastión.fuente
¡TUBERÍA!
Si Internet es una serie de tubos , Unix es una serie de tubos, algo así como:
Deberia trabajar.
Si necesita atravesar más hosts, agregue más tuberías (y más capas anidadas de
\
citas con escape) según sea necesario. (Sin embargo, tenga en cuenta que si la tubería / escape se vuelve tan compleja que tiene que dibujar un diagrama o recurrir a contar con los dedos para determinar cuántas veces tiene que duplicar los escapes , probablemente sea hora de admitir la derrota y configurar una VPN adecuada !)fuente
tar
alrededor. (También en usted no necesita elcat
en las etapas intermedias de la tubería -ssh
es feliz de comer la entrada estándar y retransmitirla El.cat
Sólo me hace sentir mejor y es un marcador para otros comandos útiles es posible que desee usar, al igual quetee
.)VPN! NOW!
en ellas ...user@host1
) tendrá en algún momento elcat ginormous-file
almacenamiento completo en cualquier momento? ¿O solo se envían los datos directamenteuser@host2
? ¿O de alguna manera se transmite? ¿Cómo estar
relevante para esto? Supongo que es relevante para la penúltima pregunta que hice. Ninguna de estas preguntas es retórica por cierto ...Si entiendo correctamente, tiene dos servidores de salto (jump-qa y jump-dev) que protegen dos servidores de aplicaciones (app-qa y app-dev); los servidores de salto pueden ssh entre sí; ninguna otra casilla que el servidor de salto relevante puede enviar ssh al servidor de aplicaciones correspondiente. Los servidores de aplicaciones pueden enviar ssh a nadie. Se debe transferir un archivo de app-dev a app-qa. Ambos servidores de salto carecen del espacio para una copia provisional de los datos.
Puede resolver esto con el túnel ssh. Configuramos una conexión a un servidor de aplicaciones remoto, llevando un túnel remoto que se conecta de nuevo a un puerto no utilizado en su servidor de salto. Configuramos una segunda conexión de un servidor de salto al otro servidor de salto, llevando un túnel que recoge el extremo colgante del puerto reenviado remotamente desde el túnel uno y lo envía al puerto ssh del otro servidor de aplicaciones.
Configure los túneles (cada uno de estos comandos deberá ejecutarse en una ventana separada
jump-qa
):Ahora debería encontrar que en app-qa, puede hacer
telnet localhost 2345
y obtener el banner ssh de app-dev. Luego puede copiar el archivo de datos:fuente