Como ssh para um servidor que não consigo acessar diretamente?

17

Contexto

Estou executando o Ubuntu Desktop como minha máquina principal, que chamarei de D. Quero conectar ao servidor S via ssh, mas o firewall está me bloqueando.

Eu tenho acesso ao servidor S, através de um caminho muito complicado, envolvendo uma máquina virtual Windows e PuTTY . Isso torna o trabalho com este servidor extremamente irritante: ambiente completamente diferente, copiar / colar não funciona, não posso usar corretamente minha área de trabalho enquanto estiver conectada a ela (o Alt-Tab é quebrado pela máquina virtual) etc.

Eu verifiquei que eu posso ssh do servidor S para minha máquina D (o oposto do que eu preciso).

Eu poderia, de alguma forma, iniciar o "encaminhamento de porta" ou similar no servidor, para que eu possa ssh para o servidor na minha área de trabalho?

dangonfast
fonte
2
Salte anfitriões ... tenho que amá-los !!!
21418 RonJohn
Possível duplicata do Tunnel SSH de A-> B-> C
muru
@ muru este é um cenário diferente, mas é claro relacionado (afinal, é sobre tunelamento!). Neste caso, eu quero fingir D->Sabusando #S->D
2100 dangonfast

Respostas:

32

Você pode usar o seguinte comando para configurar um túnel SSH do servidor remoto para sua máquina local:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

Quando o túnel é configurado, você pode simplesmente ssh no servidor remoto usando o seguinte comando:

$ ssh -p 1234 user@localhost

Observe que você precisa configurar as teclas ssh para o login automático (sem solicitação de senha). Se você deseja criar o túnel SSH interativamente, é possível remover as opções -f -N. Para mais informações man ssh,.

Khaled
fonte
Como esse túnel passa pela VM do Windows? (Onde eu trabalho, existem várias camadas de firewalls e apenas algumas portas estão abertas.)
RonJohn
@RonJohn Eu acredito que isso usa o fato de que (para OP) o ssh-server do servidor para a área de trabalho funciona, então isso configura um túnel do servidor (porta 22) diretamente para a máquina da área de trabalho (porta 1234) que pode ser usada para se conectar ao ssh no servidor (que usa a porta 22). A VM do Windows é usada apenas para configurar o túnel. (por favor me corrijam se eu estiver errado)
pizzapants184
@dangonfast Além da resposta, você pode encontrar o seguinte documento de valor: spencerstirling.com/computergeek/sshtunnel.html
Pryftan
@RonJohn O documento ao qual acabei de vincular também pode ajudar a responder a essa pergunta, pelo menos no que diz respeito a várias camadas de firewalls etc. (se a memória me servir bem - já faz muito tempo que eu a li ... lembrou de ter o link de anos atrás).
Pryftan
1
@ pizzapants184 de fato, esse foi o meu ponto de partida: ssh de S -> D, então eu quero abusar disso para efetivamente fazer D -> S, mesmo que isso não funcione diretamente. Por que a rede está configurada assim, é algo que me escapa. Poderia ser intencional ou um erro de configuração, mas enquanto ele trabalha para mim ...
dangonfast
5

Se você estiver executando uma versão mais recente do OpenSSH (7.3+), poderá usar o ProxyJumpque combina tudo magicamente:

ssh -J windows_machine remote_server

Que na sua ~/.ssh/configaparência é:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumpsuporta a sintaxe SSH completa; portanto, se você estiver jimativado windows_servere usar a porta 2222para ssh. remote_serverestá no IP a 192.168.0.110partir do windows_serverentão você pode escrever:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

E ainda apenas corra ssh remote_serverpara chegar lá.


Se você estiver executando uma versão mais antiga do SSH, use ProxyCommand - isso permitirá que o SSH execute primeiro um comando para estabelecer uma conexão proxy, antes de executar o comando SSH real.

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

Isso usa a opção SSH -W , que é uma abreviação para a sintaxe mais arcana do netcat .

Observe que, como quando você executa, ssh remote_serveragora windows_machinevocê precisa garantir o uso do IP da remove_server caixa de salto em vez do IP da sua máquina - eles podem muito bem ser os mesmos.

Você pode adicionar esta diretiva ao seu ~/.ssh/configarquivo:

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

Isso significa que, se remote_server for uma máquina diferente, como pode ser visto a partir de windows_machineentão, você pode colocá-la na configuração e ainda usar ssh remote_server.

Boris, a Aranha
fonte
1
Esta é uma resposta muito melhor.
Robert Riedl 22/02
Embora útil, isso não responde à pergunta que está sendo feita. OP afirma que eles não podem SSH de D-> S (o que eles querem), mas podem SSH de S-> D. Não há proxies ssh no meio (existe a máquina virtual do Windows, provavelmente sendo acessada pelo RDP).
mbrig
@mbrig de fato. Eu não tentei esta solução, mas eu ficaria surpreso se ele funciona: Estou firewall da D -> S
dangonfast
Mas você diz que pode acessar a máquina Windows - pelo que entendi que ela pode funcionar como uma caixa de salto entre você e a outra máquina.
Boris, a Aranha
1
Posso fazer login na máquina Windows com uma ferramenta proprietária (VMWare Horizon). Eu nunca disse que posso fazer isso. Até testei isso antes de postar essa pergunta instalando o servidor ssh companheiro Putty (esqueci o nome), mas meus testes falharam. Presumo que o ssh também esteja firewall para a sub-rede do Windows.
dangonfast
1

Em vez de tentar contornar as coisas e criar um caminho complicado, você não pode simplesmente solicitar que o SSH da área de trabalho para o servidor seja permitido? Se você precisa e deve acessar o servidor, não vejo por que você recusaria o pedido.

Explosão solar
fonte
Importa-se de explicar o voto negativo? A pergunta é "Como ssh para um servidor que não consigo acessar diretamente?" então minha resposta para ter uma regra de firewall implementada para permitir que ela seja válida. É também a maneira correta de contorná-lo, de acordo com as boas práticas de segurança.
Solarflare 22/02
Estou na minha primeira semana de contrato de três meses com um grande cliente corporativo. Não me deram um laptop (eu uso o meu) e apenas uma mesa. Eu tenho dezenas de credenciais para usar os diferentes serviços e mal estou conseguindo conciliar a coisa toda. O que eu quero fazer não é um requisito difícil para realizar meu trabalho: posso trabalhar na VM, e é isso que meu chefe me dirá se eu começar a fazer perguntas engraçadas. Ou ele me indicará o Help Desk, que lançará a lata pelas próximas semanas / meses.
dangonfast
Para mim, trabalhar na VM significa facilmente 50% de perda de produtividade, por isso quero evitá-la o máximo possível. Ainda assim, eu amo esse show!
dangonfast
1
Eu entendo isso. Na minha experiência, "grandes clientes corporativos" tendem a ficar bastante chateados quando os contratados burlam firewalls e políticas para fazer seu trabalho, mesmo que seja para fins altruístas. O fato de você poder fazer o SSH do servidor para a área de trabalho me diz que você não pode fazer o inverso é um descuido ou algo que foi implementado para uma finalidade específica.
Solarflare 22/02
4
Essa é a única solução real se você quiser evitar o risco de ser demitido por contornar políticas ... No mínimo, converse com as pessoas responsáveis ​​antes de usar a solução Khaleds para que elas saibam o que você está fazendo.
Sven