
Tengo varios hosts ssh (una docena), por simplicidad host1
, host2
etc.
Con frecuencia necesito reenviar el puerto, por ejemplo
ssh -L 8888:localhost:8888 host1
ssh -L 8889:localhost:8888 host2
ssh -L 8890:localhost:80 host2
Esto es molesto ya que 1) necesito recordar la asignación de puertos locales a hosts y 2) necesito hacerlo manualmente
Me gustaría implementar algún tipo de sistema que escuche hosts específicos (localmente, en mi máquina), por ejemplo, host1.8888.ssh.local
y abra un túnel a esta dirección automáticamente.
Respuesta1
Puedes configurar todo esto dentro del archivo de configuración ssh, que generalmente se encuentra en la ubicación:$HOME/.ssh/config
Por ejemplo:
Host abc
Hostname 1.2.3.4
Port 345
IdentityFile /path/to/id_rsa
LocalForward 8888 localhost:8888
User root
Host def
Hostname 2.3.4.5
User root
LocalForward 8889 localhost:8889
De esta manera, solo necesita escribir ssh abc
y se aplicarán todas las configuraciones que especifique allí. Opciones disponibles que se encuentran dentro delpágina de manual.
Respuesta2
yo desarrolletúnelese es un servicio que establecerá túneles y los mantendrá en funcionamiento.
server "srv_us"
HostName="srv.us"
User="root"
IdentityFile="/root/.ssh/id_ed25519"
tunnelR "srv_us_http"
servername="srv_us"
remoteaddress="1"
remoteport=80
localaddress="127.0.0.1"
localport=8080
Si tiene un enrutador OpenWrt, puede usar uno similartúnelservicio. Recientemente se agregó una GUI para configurarlo luci-app-sshtunnel.
Respuesta3
Una nota del futuro, que no tiene nada que ver con la pregunta formulada, pero resolvió el problema de fondo.
Si hace cosas en vs code en el servidor, después de iniciar cualquier proceso (por ejemplo, jupyter, tensorboard, paneles de control, servidores web), vs code reenvía esos puertos a la máquina local, por lo que no es necesario memorizar nada, los puertos se reenvían solo desde el host con el que trabaja actualmente, y cualquier número de puertos, y solo los puertos usados. ¡Qué comodidad!