En revenant à cette question, je lance la commande
ssh -R 8080:localhost:80 -N [email protected]
sur un Mac. Pourtant, le port sous tunnel ne fonctionne pas publiquement. J'exécute une telle commande pour que le port local puisse être ouvert sur l'ordinateur distant. Et cela fonctionne lorsque vous ouvrez le port sur l'hôte local sur l'ordinateur distant, mais lorsque j'essaie d'accéder à l'adresse IP publique de l'ordinateur distant à partir de mon ordinateur local, le port ne semble pas être ouvert. Comment pourrais-je rendre le tunnel public sur l'IP pour que n'importe qui puisse y accéder?
EDIT: Il semble que le côté distant se lie uniquement à localhost et non à toutes les interfaces.
EDIT 2: le client est Mac OS X 10.6 et le serveur est Linux Mint, mais ils sont tous deux OpenSSH.
ssh
ip
openssh
ssh-tunnel
Trevor Rudolph
la source
la source
Réponses:
Si vous consultez la page de manuel relative à ssh, vous constaterez que la syntaxe de
-R
lecture est la suivante:Quand
bind_address
est omis (comme dans votre exemple), le port est lié à l'interface de bouclage uniquement. Afin de le lier à toutes les interfaces, utilisezou
ou
La première version se lie à toutes les interfaces individuellement. La deuxième version crée une liaison générale uniquement IPv4, ce qui signifie que le port est accessible sur toutes les interfaces via IPv4. La troisième version est probablement techniquement équivalente à la première, mais là encore, elle ne crée qu'une seule liaison
::
, ce qui signifie que le port est accessible via IPv6 de manière native et via IPv4 via des adresses IPv6 mappées IPv4 (ne fonctionne pas sous Windows, OpenBSD). . (Vous avez besoin des guillemets, car ils[::]
pourraient autrement être interprétés comme un glob.)Notez que si vous utilisez un
sshd
serveur OpenSSH , l'GatewayPorts
option du serveur doit être activée (définie suryes
ouclientspecified
) pour que cela fonctionne (vérifier le fichier/etc/ssh/sshd_config
sur le serveur). Sinon (la valeur par défaut de cette option estno
), le serveur forcera toujours le port à être lié à l'interface de bouclage uniquement.la source
*
dans bash va donner des fichiers et j'avais besoin\*
0.0.0.0
- c'est uniquement IPv4, mais ça marche la plupart du temps :)Modifier:
-g
fonctionne pour les ports transférés locaux, mais ce que vous voulez, c'est un port transféré inversé / distant, ce qui est différent.Ce que tu veux, c'est ça .
Pour l' essentiel, sur
example.com
, misGatewayPorts=clientspecified
en/etc/ssh/sshd_config
.--- réponse précédente (incorrecte) ---
Utilisez l'option -g. De la page de manuel de ssh:
la source
netstat -elnpt
depuis un terminal séparé pour déterminer quels ports sont associés à quelle adresse. Sans cela-g
, un port devrait être lié à127.0.0.1:PORT
. Avec-g
, il devrait être lié à0.0.0.0:PORT
, ce qui le rend accessible à distance.GatewayPorts=clientspecified
ouGatewayPorts clientspecified
Voici ma réponse pour l'achèvement:
J'ai fini par utiliser
ssh -R ...
pour la création de tunnels, et ensocat
plus pour rediriger le trafic réseau vers127.0.0.1
:tunnel lié à 127.0.0.1:
ssh -R mitm:9999:<my.ip>:8084 me@mitm
socat:
mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999
Une autre option est de faire un tunnel local uniquement en plus de cela, mais je trouve cela beaucoup plus lent
mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost
la source
socat
travaillé génial. Super utile, mettre ceci dans ma poche arrière;]Vous pouvez également utiliser un double transfert si vous ne voulez pas ou ne pouvez pas modifier / etc / ssh / sshd_config.
Commencez par transférer vers le port temporaire (par exemple 10080) sur le périphérique de bouclage sur la machine distante, puis utilisez le transfert local pour rediriger le port 10080 vers 80 sur toutes les interfaces:
la source
Utilisez l'option "ports de passerelle".
ssh -g -R REMOTE_PORT:HOST:PORT ...
Pour utiliser cela, vous devrez probablement ajouter "
GatewayPorts yes
" à celui de votre serveur/etc/ssh/sshd_config
.la source
Les hôtes de saut sont un ajout assez récent à OpenSSH. Cela nécessite un accès SSH à l’intermédiaire, mais devrait fonctionner sans configuration supplémentaire.
Cette commande indique à SSH de se connecter d’abord à
[email protected]
, puis à partir de cette machine, d’établir une connexion au port 8080 surlocalhost
(c’est- à -dire, le port qui est tunnelé de l’hôte de saut à l’hôte distant) sous leremoteuser
nom d’utilisateur.la source
Si vous souhaitez mettre la configuration en vous
~/.ssh/config
au lieu d'utiliser des paramètres de ligne de commande, vous pouvez essayer quelque chose comme:Host REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80
N'oubliez pas que le pare-feu de votre hôte distant autorise les connexions à 8080 et veille à ce que l'
GatewayPorts
option de votre/etc/ssh/sshd
configuration ne soit pas définie surno
la source