Question Comment faire pour ssh vers une machine distante inaccessible en passant par un serveur accessible à tous?


Machines:

  • Appelons ma machine macbook.
  • J'ai un serveur sur tah interwebs. Appeler serveur.
  • J'ai un Mac Mini ailleurs que je peux accéder via le partage d'écran iChat. Appelons ça mini.

Accessibilité:

  • serveur ne peut voir ni macbook ni mini.
  • macbook peut voir serveur mais non mini.
  • mini peut voir serveur, mais non macbook.

Le partage d'écran est lent. Je veux une connexion SSH à mini. Une connexion directe est impossible à cause des routeurs, NAT, etc.

Ce que je veux faire est de connecter les deux macbook et mini à serveur via SSH, créant les tunnels appropriés, de sorte que de macbook Je peux courir un ssh … commande pour se connecter à mini en tunnelant la connexion via serveur.

Donc, ma question est la suivante: quelles commandes dois-je exécuter, sur quelles machines, pour que cela fonctionne?

Pour rester simple, veuillez utiliser serveur, mini, macbook comme noms d'hôtes dans vos réponses.


4
2017-08-02 06:53


origine


vous pouvez court-circuiter en configurant ipv6 sur les deux machines gogo6 est une option - c'est un peu de travail, mais cela finira plus facilement sur le long terme - Journeyman Geek♦
Ouais ce serait génial mais je ne sais même pas par où commencer. Attention à poster une réponse? - kch


Réponses:


Un seul tunnel ssh est nécessaire. De la mini:

ssh -N -R 0.0.0.0:8022:localhost:22 serverUser@server

Maintenant, vous pouvez simplement vous connecter à partir de macbook sur le serveur avec ssh -p 8022 miniUser@server

Assurez-vous d'avoir GatewayPorts mis à yes dans le serveur /etc/ssh/sshd_config.

De plus, vous voudrez peut-être définir des choses dans ~ / .ssh / config:

Host gate.mini
    HostName server
    Port 8022
    HostKeyAlias mini

Cela vous permet de faire le plus cohérent ssh miniUser@gate.mini, et en même temps, ne soyez pas dérangé par les incohérences des empreintes de serveurs.


6
2017-08-05 09:49



Cela semble génial, mais je reçois une erreur en essayant de me connecter à partir de macbook: ssh: connectez-vous à l'hôte MyActualServer du port 8022: connexion refusée - kch
Serait-ce à blâmer? "La spécification d’une bind_address distante ne réussira que si l’option GatewayPorts du serveur est activée (voir sshd_config (5))." - kch
Ok, c'était ça, j'ai pu le faire fonctionner en mettant en place GatewayPorts à yes dans /etc/ssh/sshd_config. Pouvez-vous s'il vous plaît mettre à jour votre réponse avec ce détail embêtant? - kch
Répondre édité Merci pour l'addenda. - Lloeki


Sur le Mac Mini, faites:

ssh -R 1234:localhost:22 serverUser@server

Cela transmettra les connexions au port 1234 du serveur au port 22 sur le Mac Mini.

Ensuite, sur le MacBook, faites:

ssh -L 1235:localhost:1234 serverUser@server

Cela transmettra les connexions au port 1235 du MacBook au port 1234 sur le serveur (qui sera ensuite transmis au Mac Mini par la commande ci-dessus).

Enfin, pour obtenir votre connexion réelle, sur le MacBook:

ssh -p 1235 miniUser@localhost

Qui se connecte au port 1235 sur le MacBook, qui est transmis au port 1234 sur le serveur, qui est transmis au port 22 du Mac Mini. Les ports 1234 et 1235 peuvent être définis sur plus ou moins tout ce que vous voulez - et peut être le même (j'ai utilisé des chiffres différents pour rendre l'explication plus claire). De même, le port 22 doit être modifié si SSH sur votre Mac Mini écoute sur un autre port.


4
2017-08-02 09:12



Impressionnant. Bref et au point. - kch
J'ai donc corrigé vos commandes et posté une nouvelle réponse car je n'ai pas de rep pour modifier directement votre réponse. Si vous voulez bien faire cette modification, j'accepterai volontiers votre réponse et retirerai la mienne. - kch
Mes excuses. J'oublie toujours d'ajouter le serveur quand je fais la redirection de port. Je finis par chercher dans mon histoire de terminal et trouver la commande à partir de la dernière fois que je l'ai utilisée - beaucoup plus facile que de les apprendre. ;-) La troisième commande de votre réponse fonctionne-t-elle réellement? Par ma compréhension, cela tenterait de se connecter directement à mini plutôt que de traverser le tunnel. - Scott
oops, je voulais dire localhost là-bas. - kch
Pourquoi omettez-vous l'option -N? Non que ce soit nécessaire, mais ne le préférez-vous pas? - kch


Vous pouvez créer un tunnel pour toute commande via une session ssh. Cela signifie que vous pouvez également créer un tunnel avec une commande ssh via ssh.

Cela ressemblerait à ceci:

ssh -t userOnServer@url.of.server ssh userOnMini@url.of.mini

Cela ouvre une session ssh à serveur et à partir de là, ouvre instantanément une deuxième session ssh à mini. Avec un tunnel SSH, cela devrait fonctionner sans problèmes de votre part. macbook machine. Au moins étant donné que mini est accessible depuis serveur.

Exigences:

  • ssh sur macbook 
  • serveur ssh et client ssh sur serveur 
  • serveur ssh et client ssh sur mini 

Il peut être utile de créer un alias pour ne pas avoir à taper à chaque fois que vous souhaitez vous connecter. Pensez aussi à la connexion de mot de passe moins à serveur vous n'avez donc pas besoin d'entrer 2 mots de passe pour cette connexion tunnelisée.


0
2017-08-02 07:33



le serveur ne peut pas voir mini. - kch
question mise à jour avec détails d'accessibilité. ça craint que tu mettes autant d’efforts dans une bonne réponse qui est cependant inutile: P - kch
Ça n'a pas d'importance :) - fgysin