Est-il possible de SSH via le port 80?


20

Je suis derrière un pare-feu réseau qui ne me laisse pas passer par le port par défaut. Pour cette raison, je ne peux pas pousser de branches bzr vers mon référentiel. Je voudrais savoir s'il est possible de proxy en quelque sorte le ssh via le port 80 afin que je puisse pousser les branches.

J'ai entendu dire que le tire - bouchon vous permet de faire cela, mais je ne sais pas exactement comment le faire.

Si vous connaissez un serveur proxy qui vous permet de le faire, veuillez le mentionner.


2
man sshrévèle le port: host: hostport. Alors essayez ssh 80:server.com.
MarkovCh1

C'est pour configurer un tunnel via -L ou -R. Vous auriez donc besoin d'une autre boîte pour la traverser.
Césium

Réponses:


19

Un bon pare-feu d'entreprise inspectera le trafic quel que soit le port, donc le changement de port risque de ne pas fonctionner.

Si vous avez le contrôle sur le serveur et que vous souhaitez toujours l'essayer, vous pouvez changer le port sshd en port 80. Avertissement Si vous avez quelque chose d'autre en cours d'exécution sur le port 80 (sur le serveur), cela ne fonctionnera pas et vous signifiera probablement complètement perdre l'accès SSH au serveur!

Vous aurez besoin de modifier /etc/ssh/sshd_configet de changer Portpour 80. Ensuite, exécutez

sudo restart ssh

Et puis connectez:

ssh user@host -p80

Votre chemin bzr ressemblerait alors à quelque chose comme: bzr+ssh://host:80/path/


Une autre méthode consiste à utiliser WebDav. Cela devrait contourner complètement le problème du pare-feu, car tout se passe sur le port 80, mais il vous faudra exécuter Apache et configurer un certain nombre de choses:

  1. Installez WebDav
  2. Déplacez votre succursale au bon endroit
  3. Utilisez le plugin bzr-webdav pour vous connecter

Un VPN pourrait être une option mais s'il sshest verrouillé, je m'attendrais à ce qu'il soit également exclu.

Vous voudrez peut-être simplement avoir un mot avec vos administrateurs réseau. Vous devez faire quelque chose et ils vous arrêtent. S'ils ont une raison de bloquer ssh, il est probable qu'ils verront toutes les tentatives extrêmes pour le contourner assez négativement ...

En bref, il serait peut-être plus sûr de leur parler.


7
+1 pour discuter de vos besoins avec votre service informatique. Dans de nombreux environnements, y compris le mien, ce type d'activité serait un motif de cessation.
Panther

1
De plus, s'il veut faire écouter le serveur ssh sur un autre port, il pourrait le faire écouter sur les ports 22 et 80 en ayant deux Portlignes, avec une pour chaque port dans le /etc/ssh/sshd_configfichier.
Azendale

J'éviterai de faire une liste (la liste est longue et la discussion de certains des éléments qu'elle contient peut devenir très politique très rapidement), mais cette question couvre de nombreuses situations en plus de celle d'un employé cherchant à contourner une politique d'entreprise loyalement mise en œuvre par propre service informatique de l'entreprise. Je suis tout à fait pour que les gens discutent de leurs besoins professionnels avec l'informatique, mais ce n'est pas toujours applicable, et parfois les services informatiques répondent même: "Ça va, mais nous ne changeons rien pour vous accommoder." Séparément, il est tout à fait plausible que le port 22 soit bloqué par les VPN, donc je pense que cela vaut la peine d'essayer.
Eliah Kagan

@Panther Alors certaines personnes seraient encore plus heureuses de mettre fin à ce régime d'entreprise.
NeverEndingQueue

15

SSH via le proxy

Si le pare-feu vous le permet, vous pouvez exécuter ssh sur n'importe quel port, mais cela nécessite que le serveur ssh écoute sur ce port. Il est peu probable que le port 80 fonctionne, car la plupart des emplacements dotés de pare-feu analysent le trafic sur ce port et bloquent tout ce qui n'est pas HTTP. Mais le port 443, qui est normalement le port HTTPS, fonctionne souvent, car SSH et HTTPS se ressemblent beaucoup aux logiciels de filtrage, donc votre session SSH ressemblera à une session HTTPS. (Il est possible de distinguer HTTPS et SSH, donc cela ne fonctionnera pas si le pare-feu est suffisamment sophistiqué.)

Si vous avez le contrôle sur le serveur, faites-le écouter sur le port 443 en plus du 22 (le port ssh normal). Vous pouvez configurer le port dans /etc/ssh/sshd_config: ajouter une ligne

Port 443

en plus du Port 22qui devrait déjà être là. Notez que cela suppose que le serveur ssh n'est pas également un serveur HTTPS. Si c'est le cas, vous devrez trouver un autre port que le pare-feu vous permet d'utiliser ou trouver un autre serveur ssh (voir le transfert ci-dessous).

Si vous n'avez pas besoin de définir un proxy Web dans votre navigateur Web, vous pouvez essayer de vous connecter directement:

ssh -p 443 myserver.example.com

Si cela fonctionne, définissez un alias dans votre ~/.ssh/config:

Host myserver
HostName myserver.example.com
Port 443

Si vous devez définir un proxy Web dans votre navigateur Web, dites à ssh de passer par le proxy. Installez le tire-bouchon . Définissez un alias comme celui-ci dans votre ~/.ssh/config, où http://proxy.acme.com:3128/est le proxy que vous utilisez pour HTTPS vers l'extérieur (remplacez-le par le nom d'hôte et le port appropriés):

Host myserver
HostName myserver.example.com
Port 443
ProxyCommand /usr/bin/corkscrew proxy.acme.com 3128 %h %p

SSH sur SSH

Si vous pouvez accéder à une machine extérieure par l'une des techniques ci-dessus mais pas à la machine qui vous intéresse, utilisez-la pour transférer une connexion. En supposant que vous pouvez ssh sur une machine appelée mygatewayet que vous souhaitez atteindre le serveur SSH mytarget, installez netcat-openbsd sur mygateway(ou, s'il n'exécute pas Ubuntu, assurez-vous qu'il a la nccommande). Mettez ceci dans votre ~/.ssh/config:

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH à Apache

Si l'hôte auquel vous souhaitez vous connecter exécute déjà Apache et écoute sur le port 443, et que vous avez le contrôle sur cet hôte, vous pouvez configurer cet Apache pour accepter les connexions SSH et les transférer. Voir Tunneling SSH sur HTTP (S) .


vous pouvez également utiliser nc au lieu du tire-bouchon pour https, oui? stackoverflow.com/a/15577758/32453
rogerdpack

3

Je viens de lire une solution sophistiquée ici:

http://benctechnicalblog.blogspot.hu/2011/03/ssh-over-connect-over-port-80.html

Vous pouvez SSH home sur le port 80 même si votre serveur domestique exécute également un serveur web sur le port 80.

En supposant que le serveur domestique exécute Apache. L'idée consiste à activer mod_proxy sur votre serveur, puis à le restreindre à la connexion à localhost (proxy.conf):

<IfModule mod_proxy.c>
         ProxyRequests On
        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Deny from all
        </Proxy>
        <Proxy localhost>
          Allow from all
        </Proxy>
        AllowCONNECT 22
        ProxyVia On
</IfModule>

Vous pouvez maintenant faire une demande de connexion HTTP à l'hôte local et le serveur Web établira un tunnel pour vous, il vous suffit de vous assurer que tout le trafic passe par votre proxy:

ssh -o 'ProxyCommand nc -X connect -x myhost.example.com:80 localhost 22' myhost.example.com

Assurez-vous que les connexions localhost à SSH ne sont pas privilégiées (pour éviter de laisser des étrangers entrer ...)

Cela devrait fonctionner si vous êtes derrière un routeur qui n'autorise que la sortie du port 80.

Si vous êtes derrière un proxy (vous devez donc définir un proxy dans votre navigateur pour accéder au Web), vous devrez d'abord établir un tunnel vers votre propre hôte, puis émettre une autre demande CONNECT à l'intérieur de ce tunnel pour accéder à votre hôte. C'est plus sophistiqué, vous devrez utiliser 2 netcats pour cela.

Tout est possible, mais faites-le à vos risques et périls ...

MISE À JOUR:

Ou tout simplement, utilisez simplement une application Web qui vous donne SSH via un navigateur. http://en.wikipedia.org/wiki/Web-based_SSH


2

Si vous n'avez aucun contrôle sur le serveur pour changer le port SSH en port 80 ou si vous ne pouvez pas SSH sur le port 80 parce que le pare-feu vous empêche de transférer ces données via le port 80, vous pouvez essayer TOR.

TOR est un immense réseau. Votre ordinateur se connecte à un autre ordinateur quelque part dans le monde, cet ordinateur se connecte à un autre jusqu'à ce qu'il atteigne le serveur SSH. Tout cela est compatible avec le pare-feu, cela se produit sur le port 443 (que votre entreprise ne bloque pas, ou bien .. eh bien, ce n'est pas si intelligent d'eux). C'est littéralement juste un énorme proxy ou VPN, et il est également crypté. De cette façon, vous pouvez accéder à n'importe quel hôte sur n'importe quel port (également SSH d'un serveur sur le port 22).

Jetez-y un œil en ligne sur www.torproject.org .


2

Je suis désolé, je dois jouer l'avocat des démons.

Je sais qu'il y a probablement une raison à cela, mais pourquoi votre administrateur réseau / pare-feu n'ouvrira-t-il pas le port spécifique que vous recherchez? Du point de vue de la sécurité, voulez-vous prendre le risque que l'inspection Web manque quoi que ce soit? S'il est configuré pour contourner le port 80 pour le trafic std, et que vous vous mettez en danger.

Je suis d'accord avec quelques suggestions ci-dessus, où un point à point vpn peut être une option plus sûre. Encore une fois, du point de vue de la sécurité, je serais intéressé de savoir pourquoi vous contournez vraiment les politiques de sécurité et pourquoi vous ne pouvez pas placer votre serveur dans un dmz ou une dorsale pour l'accès. Juste moi. Bonne chance.


2
Il n'est pas toujours possible de parler aux administrateurs réseau, et les administrateurs réseau ne sont pas toujours raisonnables.
Jeremy Bicha

Par exemple, si vous êtes assis dans un café, connecté au WiFi, mais que l'accès est limité par l'administrateur (et que vous devez toujours vous connecter maintenant).
old-ufo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.