É possível fazer o SSH pela porta 80?

20

Estou atrás de um firewall de rede que não me permite ssh através da porta padrão. Por isso, não posso enviar nenhum ramo bzr para o meu repositório. Gostaria de saber se é possível de alguma forma fazer proxy do ssh através da porta 80 para que eu possa enviar os galhos.

Ouvi dizer que o saca-rolhas permite que você faça isso, mas não sei exatamente como fazer isso.

Se você conhece algum servidor proxy que permita fazer isso, mencione-os.

jokerdino
fonte
2
man sshrevela port: host: hostport. Então tente mais ssh 80:server.comou menos.
MarkovCh1
Isso é para configurar um túnel via -L ou -R. Então você precisaria de outra caixa para encapsulá-la.
Cesium
11
Veja também unix.stackexchange.com/a/190612/4319
imz - Ivan Zakharyaschev

Respostas:

19

Um bom firewall corporativo inspeciona o tráfego, independentemente da porta, portanto, a mudança de porta pode não funcionar.

Se você tem controle sobre o servidor e ainda deseja experimentá-lo, pode alterar a porta sshd para a porta 80. Aviso Se houver algo mais em execução na porta 80 (no servidor), isso não funcionará e provavelmente significará que você está completamente perca o acesso SSH ao servidor!

Você precisará editar /etc/ssh/sshd_confige alterar Portpara 80. Então corra

sudo restart ssh

E então conecte:

ssh user@host -p80

Seu caminho bzr ficaria assim: bzr+ssh://host:80/path/


Outro método é usar o WebDav. Isso deve contornar completamente o problema do firewall, porque tudo acontece na porta 80, mas exigirá que você esteja executando o Apache e configure várias coisas:

  1. Instale o WebDav
  2. Mova sua filial para o lugar certo
  3. Use o plug - in bzr-webdav para conectar

Uma VPN pode ser uma opção, mas se sshestiver bloqueada, espero que isso também seja excluído.

Você pode apenas querer falar com seus administradores de rede. Você precisa fazer algo e eles estão parando você. Se eles tiverem um motivo para bloquear ssh, é provável que vejam todas as tentativas extremas de contorná-lo de maneira bastante negativa ...

Em suma, pode ser mais seguro conversar com eles.

Oli
fonte
7
+1 para discutir suas necessidades com seu departamento de TI. Em muitos ambientes, inclusive os meus, esse tipo de atividade seria motivo de rescisão.
Pantera
11
Além disso, se ele fizer o servidor ssh escutar em outra porta, ele poderá escutar nas portas 22 e 80 tendo duas Portlinhas, com uma para cada porta no /etc/ssh/sshd_configarquivo.
Azendale 27/02
Evitarei fazer uma lista (a lista é longa e a discussão de alguns dos itens nela pode ser muito política rapidamente), mas essa pergunta abrange muitas situações além da de um funcionário que tenta contornar uma política da empresa que é lealmente implementada por próprio departamento de TI da empresa. Sou a favor das pessoas que discutem suas necessidades de trabalho com a TI, mas isso nem sempre é aplicável, e às vezes os departamentos de TI até respondem com: "Está tudo bem, mas não estamos mudando nada para acomodá-lo". Separadamente, é bastante plausível que a porta 22 seja bloqueada pelas VPNs, então acho que vale a pena tentar.
Eliah Kagan 28/05
@ Panther Então algumas pessoas ficariam ainda mais felizes em acabar com esse regime corporativo.
NeverEndingQueue
15

SSH através do proxy

Se o firewall permitir, você poderá executar o ssh em qualquer porta, mas isso exige que o servidor ssh esteja escutando nessa porta. É improvável que a porta 80 funcione, porque a maioria dos locais com firewalls analisa o tráfego nessa porta e bloqueia qualquer coisa que não seja HTTP. Mas a porta 443, que normalmente é a porta HTTPS, geralmente funciona, porque o SSH e o HTTPS se parecem muito com o software de filtragem, portanto, a sua sessão SSH se parecerá com uma sessão HTTPS. (É possível distinguir HTTPS e SSH, para que isso não funcione se o firewall for sofisticado o suficiente.)

Se você tiver controle sobre o servidor, faça com que ele escute na porta 443 além da 22 (a porta ssh normal). Você pode configurar a porta em /etc/ssh/sshd_config: adicione uma linha

Port 443

além do Port 22que já deveria estar lá. Observe que isso pressupõe que o servidor ssh também não seja um servidor HTTPS. Se for, você precisará encontrar outra porta que o firewall permita que você use ou encontrar outro servidor ssh (consulte o encaminhamento abaixo).

Se você não precisar definir um proxy da web em seu navegador, tente conectar-se diretamente:

ssh -p 443 myserver.example.com

Se isso funcionar, defina um alias no seu ~/.ssh/config:

Host myserver
HostName myserver.example.com
Port 443

Se você precisar definir um proxy da web em seu navegador, diga ao ssh para passar pelo proxy. Instale o saca-rolhas . Defina um alias como este no seu ~/.ssh/config, onde http://proxy.acme.com:3128/está o proxy que você usa para o HTTPS para fora (substitua pelo nome do host e pela porta):

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

SSH sobre SSH

Se você puder acessar uma máquina externa usando uma das técnicas acima, mas não a máquina na qual está interessado, use-a para encaminhar uma conexão. Assumindo que você pode ssh para uma máquina chamada mygatewaye você quer alcançar o servidor SSH em mytarget, instale netcat-openbsd em mygateway(ou, se não estiver rodando Ubuntu, certifique-se que tem o nccomando). Coloque isso no seu ~/.ssh/config:

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH para Apache

Se o host ao qual você deseja se conectar já estiver executando o Apache e estiver escutando na porta 443, e você tiver controle sobre esse host, poderá configurá-lo para aceitar conexões SSH e encaminhá-las. Consulte Encapsulando SSH sobre HTTP (S) .

Gilles 'SO- parar de ser mau'
fonte
você também pode usar nc em vez de saca-rolhas para https, sim? stackoverflow.com/a/15577758/32453
rogerdpack
3

Acabei de ler uma solução sofisticada aqui:

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

Você pode SSH em casa na porta 80, mesmo que o servidor doméstico também execute um servidor da web na porta 80.

Supondo que o servidor doméstico execute o Apache. A ideia envolve ativar o mod_proxy no seu servidor e depois restringi-lo à conexão com o 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>

Agora você pode fazer uma solicitação de conexão HTTP ao host local e o servidor da web estabelecerá um túnel para você, você só precisa garantir que todo o tráfego passe pelo seu proxy:

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

Certifique-se de que as conexões do host local ao SSH não sejam privilegiadas (para evitar que estranhos entrem ...)

Isso deve funcionar se você estiver atrás de um roteador que permita apenas a porta 80.

Se você estiver atrás de um proxy (para configurar o proxy no navegador para obter a Web), primeiro será necessário estabelecer um túnel para o seu próprio host e, em seguida, emitir outra solicitação CONNECT dentro desse túnel para chegar ao seu host. Isso é mais sofisticado, você precisará usar 2 netcats para isso.

Tudo é possível, mas faça-o por seu próprio risco ...

ATUALIZAR:

Ou simplesmente, use um aplicativo da web que fornece SSH por meio de um navegador. http://en.wikipedia.org/wiki/Web-based_SSH

Calmarius
fonte
2

Se você não tiver nenhum controle sobre o servidor para alterar a porta SSH para a porta 80 ou se não puder SSH pela porta 80 porque o firewall o impede de transferir esses dados pela porta 80, tente o TOR.

TOR é uma rede enorme. Seu computador se conecta a outro computador em algum lugar do mundo, que se conecta a outro até atingir o servidor SSH. Tudo isso é compatível com firewall, acontece na porta 443 (que sua empresa não bloqueia, ou então .. bem, isso não é tão inteligente da parte deles). É literalmente apenas um proxy ou VPN enorme, e também é criptografado. Dessa forma, você pode acessar qualquer host em qualquer porta (também o SSH de um servidor na porta 22).

Dê uma olhada on-line em www.torproject.org .

Robbietjuh
fonte
2

Sinto muito, tenho que bancar o advogado do diabo.

Sei que provavelmente existe uma razão para fazer isso; no entanto, por que o administrador da rede / firewall não abre a porta específica que você está procurando? Do ponto de vista da segurança, você quer arriscar que a inspeção na Web perca alguma coisa? Se estiver configurado para ignorar a porta 80 para tráfego padrão, e você estiver se colocando em perigo.

Concordo com algumas sugestões acima, onde, como ponto a ponto, a VPN pode ser uma opção mais segura. Novamente, do ponto de vista de segurança, eu gostaria de saber por que você está realmente ignorando as políticas de segurança e por que você não pode colocar seu servidor em um dmz ou em um backbone de acesso. Apenas eu. Boa sorte.

Solarfinder
fonte
2
Nem sempre é possível conversar com os administradores de rede, e os administradores de rede nem sempre são razoáveis.
21812 Jeremy Bicha
Por exemplo, se você está sentado no café, conectado ao Wi-Fi, mas o acesso restrito do administrador (e você ainda precisa se conectar agora).
old-ufo