Obtenga archivos del servidor a dos pasos [cerrado]

14

Tenemos la siguiente situación:

  1. Mi maquina
  2. Una máquina de entrada
  3. La maquina objetivo

No tengo derechos de root en ambos # 2 y # 3. Tampoco puedo realmente almacenar información (no más de 200 MiB) en la máquina # 2 (ya que es una puerta de entrada al resto de la red, no más que eso). En la máquina # 3 hay una carpeta, de aproximadamente 3 GiB de tamaño, que quiero copiar a local. No puedo SSH de # 1 a # 3, pero puedo SSH a # 2 y luego a # 3. Tampoco es posible configurar un par de claves público privado entre # 2 y # 3, pero hay un par de claves instalado entre # 1 y # 2.

Normalmente uso la combinación de SSH y alquitrán para hacer esto:

ssh name@host "tar cf - folder" > folder.tar

Pero en este caso eso requeriría algún tipo de anidamiento, y parece que no puedo hacer esto.

Entonces, ¿cuál sería una buena manera de obtener los datos del # 3 al # 1?

Cheiron
fuente

Respuestas:

27

Puede crear un túnel SSH a través de machine2 y luego, en otra sesión, conectarse al túnel.

Por ejemplo, abra dos sesiones de CLI en machine1. En la primera sesión, ejecute lo siguiente:

MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2

En la segunda sesión, ejecute lo siguiente:

MACHINE1 $ ssh -p 2022 <user>@localhost

Lo que sucede con el primer comando es que un puerto local (2022 en la máquina1) se está tunelizando al puerto 22 en la máquina3 usando su conexión SSH a la máquina2.

Con el segundo comando, se conecta al puerto local recién abierto (2022) y es como si se conectara directamente a la máquina3.

Ahora, si desea utilizar su proceso típico de transferencia de archivos, puede hacer lo siguiente:

ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar

Alternativamente, puede familiarizarse con rsync y hacer algo como esto en su lugar:

rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/

Suponiendo que el objetivo final no es obtener un tarball.

Gene
fuente
2
El uso ProxyCommandy ssh -Wlos dos sshcomandos se pueden combinar en una sola línea de comando. Si tiene una versión muy reciente del cliente OpenSSH, hay un argumento que le permitirá hacerlo todo con un solo sshcomando.
kasperd
+1 para rsync;)
NieDzejkob
Uso tar porque transferir muchos archivos lleva más tiempo que transferir un archivo grande. ¿Rsync resuelve esto?
Cheiron
Al realizar transferencias remotas, rsync comprueba los datos en tránsito (en el extremo receptor, antes de escribirlos en el disco), por lo que llevará más tiempo transferir un archivo. Sin embargo, ese es un tiempo bien empleado.
Gene
5

También puede usar la capacidad de sesión maestra de las versiones más nuevas de SSH. Se describe aquí:

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

Probablemente todo lo que necesita es editar / crear su .ssh / config. Agregue las definiciones que controlan las sesiones maestras:

ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30

Luego puede especificar su definición de servidor de primer salto como:

Host first_hop
Hostname <your first host FQDN or IP>
User <your user>

Y el segundo salto usará su servidor de primer salto como proxy:

Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop

No olvides crear el directorio ~ / .ssh / cm_socket y los permisos de configuración deben ser 644.

Entonces debería poder SSH o SCP directamente desde / hacia su segundo servidor. Puede haber más servidores encadenados como este.

Jaroslav Kucera
fuente
3
Al leer su enlace, no creo que ControlMastersea ​​necesario Multiplexar / para poder hacer proxy. La página más relevante en ese wikibook es esta: en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
IMSoP
Sí estoy de acuerdo. Hay múltiples formas Sin embargo, considero que la sesión Master es la más elegante. Se trata solo de preferencias personales ;-)
Jaroslav Kucera
Uno u otro de nosotros había entendido mal algo. Hasta donde puedo ver, la "conexión maestra" se trata de hacer un uso eficiente de los recursos de la red y no tiene nada que ver con la pregunta. No es una forma diferente de hacerlo, simplemente es irrelevante para la tarea en cuestión.
IMSoP