Tengo dos máquinas, Cliente y Servidor.
El cliente (que está detrás de un firewall corporativo) abre un túnel SSH inverso al Servidor, que tiene una dirección IP de acceso público, usando este comando:
ssh -nNT -R0: localhost: 2222 insecure@server.example.com
En OpenSSH 5.3+, lo que 0
ocurre justo después de los -R
medios "elige un puerto disponible" en lugar de llamarlo explícitamente. La razón por la que hago esto es porque no quiero elegir un puerto que ya esté en uso. En verdad, en realidad hay muchos clientes que necesitan establecer túneles similares.
El problema en este punto es que el servidor no sabe qué Cliente es cuál. Si queremos volver a conectarnos con uno de estos Clientes (a través de localhost), ¿cómo sabemos qué puerto se refiere a qué cliente?
Soy consciente de que ssh informa el número de puerto a la línea de comando cuando se usa de la manera anterior. Sin embargo, también me gustaría usar autossh para mantener vivas las sesiones. autossh ejecuta su proceso hijo a través de fork / exec, presumiblemente, para que la salida del comando ssh real se pierda en el éter.
Además, no se me ocurre otra forma de obtener el puerto remoto del Cliente. Por lo tanto, me pregunto si hay una manera de determinar este puerto en el servidor.
Una idea que tengo es usar de alguna manera / etc / sshrc, que supuestamente es un script que se ejecuta para cada conexión. Sin embargo, no sé cómo se obtendría la información pertinente aquí (¿tal vez el PID del proceso sshd particular que maneja esa conexión?) Me encantaría algunos consejos.
¡Gracias!