reenvío de puertos y copia de nuevo a la máquina local

reenvío de puertos y copia de nuevo a la máquina local

Por lo general, inicio sesión en una red a través de ssh y luego nuevamente en otra computadora a través de ssh hasta mi computadora de destino final. Por ejemplo, un servidor doméstico y, una vez allí, a una de las computadoras de mi familia. Eso se parece a:

user0@inital:> ssh -P port_number user1@server
user1@server:> ssh -P port_number user2@final
user2@final:>

Una vez activado, user2@finalme gustaría copiar (scp) nuevamente a user0@inital.

Por ejemplo, puedo reenviar el puerto local y copiar desde mi computadora local a la remota a través del servidor. Enuser0@initial

 user0@initial:> ssh -L4321:final:22 -p 443 user1@server

Esto reenvía el puerto 4321local user0@initialdesde user1@serverel 22puerto user2@final. Luego sigue user0@initialcorriendo

  scp -P 4321 some_file  [email protected]:~/

Puedo copiar a user2@finalover user1@server.

La pregunta es cómo revertir las cosas y copiarlas de user2@finala user0@initial.

Gracias por su ayuda.

Respuesta1

Suponiendo que desea ejecutar el comando scp en el símbolo del sistema de final:

# have the local client tell the remote server's sshd to listen on
# port 8765 (randomly chosen) and forward any connection it receives
# to the client which will connect to port 22 locally.
user0@initial:> ssh -R127.0.0.1:8765:127.0.0.1:22 -p 443 user1@intermediate

# On this machine have the client tell this remote server's (final's)
# to listen on port 9876 (randomly chosen) and forward any connection
# that it receives back to this client which will connect it to poirt
# 8765 locally.
user1@intermediate:> ssh -R127.0.0.1:9876:127.0.0.1:8765 user2@final

# Now that you are on the final server (final) you run scp, telling
# it to connect to localhost on port 9876.
# 
# So scp will connec to local (final's) port 9876, which is listened
# to by the local sshd based on our second command above.  That sshd
# will forward the connection to the ssh client that connected to it
# (on intermediate).
# 
# The ssh client on intermediate will connect to localhost:8765 as
# instructed which is a conenction to the sshd on intermediate that
# is listening on that port because it was instructed to do so by the
# ssh client on initial when it connected.
# 
# The sshd on intermediate will forward the conenction back to the
# client on initial which will, as instructed, connect to localhost:22
# on initial.
# 
# All this monkey motion means that now scp on final is "directly"
# connected to port 22 (sshd) on initial and can initiate a login
# and file transfer. to the ssh client that connected to it (on
# intermediate).
user2@final:> scp -P 9876 file_from_final 127.0.0.1:back_at_the_house

Tenga en cuenta que hice todos los puertos en 127.0.0.1, lo que los protege de la explotación por parte de otros en Internet (pero no de otros en el "servidor" o "final".

Respuesta2

Sí. Querrá echar un vistazo a la palabra clave ssh_configComando proxy

Especifica el comando que se utilizará para conectarse al servidor. La cadena de comando se extiende hasta el final de la línea y se ejecuta utilizando la directiva 'exec' del shell del usuario para evitar un proceso de shell prolongado.

En la cadena de comando, cualquier aparición de '%h' se sustituirá por el nombre del host para conectarse, '%p' por el puerto y '%r' por el nombre de usuario remoto. El comando puede ser básicamente cualquier cosa y debe leerse desde su entrada estándar y escribirse en su salida estándar. Eventualmente debería conectarse a un servidor sshd(8) que se ejecuta en alguna máquina, o ejecutar sshd -i en algún lugar. La administración de claves de host se realizará utilizando el nombre de host del host que se está conectando (de forma predeterminada, el nombre escrito por el usuario). Establecer el comando en "ninguno" desactiva esta opción por completo. Tenga en cuenta que CheckHostIP no está disponible para conexiones con un comando proxy.

Esta directiva es útil junto con nc(1) y su soporte de proxy. Por ejemplo, la siguiente directiva se conectaría mediante un proxy HTTP en 192.0.2.0:

ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p

información relacionada