Ce sont des étapes plus détaillées pour tester ou dépanner un tunnel SSH. Vous pouvez utiliser certains d'entre eux dans un script. J'ajoute cette réponse parce que j'ai dû dépanner le lien entre deux applications après qu'elles aient cessé de fonctionner. Le simple fait de saluer le processus de SSH ne suffisait pas, car il était toujours là. Et je ne pouvais pas utiliser nc -z
parce que cette option n'était pas disponible sur mon incantation de netcat.
Commençons par le début. Supposons qu'il existe une machine, qui sera appelée local avec l'adresse IP 10.0.0.1 et une autre, appelée à distance, à 10.0.3.12. Je préfèrerai ces noms d'hôtes, aux commandes ci-dessous, donc il est évident où ils sont en cours d'exécution.
L'objectif est de créer un tunnel qui transmettra le trafic TCP de l'adresse de bouclage sur la machine distante sur le port 123 à la machine locale sur le port 456.Cela peut être fait avec la commande suivante, sur la machine locale:
local:~# ssh -N -R 123:127.0.0.1:456 10.0.3.12
Pour vérifier que le processus est en cours d'exécution, nous pouvons faire:
local:~# ps aux | grep ssh
Si vous voyez la commande dans la sortie, nous peut continuer. Sinon, vérifiez que la clé SSH est installée dans la télécommande. Notez qu'en excluant le nom d'utilisateur avant l'adresse IP distante, ssh utilise le nom d'utilisateur actuel.
Ensuite, nous voulons vérifier que le tunnel est ouvert sur la télécommande:
remote:~# netstat | grep 10.0.0.1
Nous devrions obtenir une sortie semblable à ceci:
tcp 0 0 10.0.3.12:ssh 10.0.0.1:45988 ESTABLISHED
Ce serait bien de réellement voir certaines données passant de la télécommande à l'hôte. C'est où netcat entre. Sur CentOS il peut être installé avec yum install nc
.
D'abord, ouvrir un port d'écoute sur la machine locale:
local:~# nc -l 127.0.0.1:456
Effectuez ensuite une connexion sur la télécommande:
remote:~# nc 127.0.0.1 123
Si vous ouvrez une deuxième borne à la machine locale, vous pouvez voir la connexion. Quelque chose comme ceci:
local:~# netstat | grep 456
tcp 0 0 localhost.localdom:456 localhost.localdo:33826 ESTABLISHED
tcp 0 0 localhost.localdo:33826 localhost.localdom:456 ESTABLISHED
Mieux encore, allez-y et tapez quelque chose sur la télécommande:
remote:~# nc 127.0.0.1 8888
Hallo?
anyone there?
Vous devriez voir ceci étant en miroir sur le terminal local:
local:~# nc -l 127.0.0.1:456
Hallo?
anyone there?
Le tunnel travaille! Mais que se passe-t-il si vous avez une application, appelée appname, qui est supposée écouter sur le port 456 sur la machine locale? Terminez nc des deux côtés puis exécutez votre application. Vous pouvez vérifier qu'il est à l'écoute sur le port correct avec this:
local:~# netstat -tulpn | grep LISTEN | grep appname
tcp 0 0 127.0.0.1:456 0.0.0.0:* LISTEN 2964/appname
Par ailleurs, en cours d'exécution de la même commande sur la télécommande doit montrer sshd écoute sur le port 127.0.0.1:123.
cela pourrait aider en partie "lsof -i | ssh grep" – qartal