Estos son los pasos más detallados para probar o solucionar problemas de un túnel SSH. Puede usar algunos de ellos en un script. Estoy agregando esta respuesta porque tuve que solucionar el vínculo entre dos aplicaciones después de que dejaron de funcionar. Simplemente desgranar para el proceso de ssh no fue suficiente, ya que todavía estaba allí. Y no pude usar nc -z
porque esa opción no estaba disponible en mi conjuro de netcat.
Comencemos desde el principio. Supongamos que hay una máquina, que se llamará local con dirección IP 10.0.0.1 y otra, llamada remota, en 10.0.3.12. Precederé estos nombres de host, a los comandos a continuación, por lo que es obvio dónde se ejecutan.
El objetivo es crear un túnel que reenvíe el tráfico TCP desde la dirección de bucle invertido en la máquina remota en el puerto 123 a la máquina local en el puerto 456.Esto se puede hacer con el siguiente comando, en la máquina local:
local:~# ssh -N -R 123:127.0.0.1:456 10.0.3.12
Para comprobar que el proceso está en marcha, lo que podemos hacer:
local:~# ps aux | grep ssh
Si ve el comando en la salida, nos puede proceder. De lo contrario, verifique que la clave SSH esté instalada en el control remoto. Tenga en cuenta que excluyendo el nombre de usuario antes de la IP remota, hace que ssh use el nombre de usuario actual.
A continuación, se quiere comprobar que el túnel está abierta en el control remoto:
remote:~# netstat | grep 10.0.0.1
Debemos obtener una salida similar a la siguiente:
tcp 0 0 10.0.3.12:ssh 10.0.0.1:45988 ESTABLISHED
sería bueno en realidad ver algunos datos que van desde el control remoto hasta el host. Aquí es donde entra netcat. En CentOS se puede instalar con yum install nc
.
En primer lugar, abrir un puerto de escucha en la máquina local:
local:~# nc -l 127.0.0.1:456
después establecer una conexión en el control remoto:
remote:~# nc 127.0.0.1 123
Si abre un segundo terminal de la máquina local, puede ver la conexión Algo como esto:
local:~# netstat | grep 456
tcp 0 0 localhost.localdom:456 localhost.localdo:33826 ESTABLISHED
tcp 0 0 localhost.localdo:33826 localhost.localdom:456 ESTABLISHED
Mejor aún, seguir adelante y escribir algo en el control remoto:
remote:~# nc 127.0.0.1 8888
Hallo?
anyone there?
Visita obligatoria que se refleja en el terminal local:
local:~# nc -l 127.0.0.1:456
Hallo?
anyone there?
El túnel ¡está trabajando! Pero, ¿qué sucede si tiene una aplicación, llamada , nombre de aplicación, que se supone que escucha en el puerto 456 de la máquina local? Termina nc en ambos lados y luego ejecuta tu aplicación. Puede comprobar que se está escuchando en el puerto correcta con this:
local:~# netstat -tulpn | grep LISTEN | grep appname
tcp 0 0 127.0.0.1:456 0.0.0.0:* LISTEN 2964/appname
Por cierto, que ejecuta el mismo comando en el mando a distancia debe mostrar sshd escucha en el puerto 127.0.0.1:123.
esto podría ayudar parcialmente "lsof -i | grep ssh" – qartal