Como ssh para um servidor que eu não posso alcançar diretamente?

17

Contexto

Estou usando o Ubuntu Desktop como minha máquina principal, que eu chamarei de D. Eu quero me 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 do Windows e PuTTY . Isso torna o trabalho com este servidor extremamente irritante: ambiente completamente diferente, copiar / colar não funciona, não consigo usar corretamente o meu desktop enquanto estiver conectado a ele (Alt-Tab é quebrado pela Máquina Virtual) etc

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

Eu poderia de alguma forma iniciar o "encaminhamento de porta" ou algo semelhante do servidor, para que eu possa ssh para o servidor da minha área de trabalho?

    
por dangonfast 21.02.2018 / 11:23

3 respostas

32

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

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

Quando o túnel está configurado, você pode simplesmente enviar ssh para o seu servidor remoto usando o seguinte comando:

$ ssh -p 1234 user@localhost

Por favor, note que você precisa configurar as chaves ssh para login automático (sem prompt de senha). Se você quiser criar o túnel SSH interativamente, poderá remover as opções -f -N . Para mais informações, man ssh .

    
por 21.02.2018 / 11:29
5

Se você estiver executando uma versão mais recente do OpenSSH (7.3+), use ProxyJump que combina tudo magicamente:

ssh -J windows_machine remote_server

Qual é o seu ~/.ssh/config :

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJump suporta a sintaxe SSH completa, portanto, se você for jim on windows_server e usar a porta 2222 para ssh. remote_server está no IP 192.168.0.110 do windows_server , então você pode escrever:

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

E ainda é só executar ssh remote_server para chegar lá.

Se você estiver executando uma versão mais antiga do SSH, use ProxyCommand - isso permite que você informe o SSH primeiro execute 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 o mais arcano sintaxe do netcat .

Observe que, como quando você executa ssh remote_server , agora está no windows_machine , é necessário garantir que você use o IP do remove_server da caixa de salto em vez do IP da sua máquina - estes podem ser os mesmos.

Você pode adicionar essa diretiva ao arquivo ~/.ssh/config :

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 vista de windows_machine , você pode colocar isso na configuração e ainda usar ssh remote_server .

    
por 22.02.2018 / 10:33
1

Em vez de tentar contornar as coisas e criar um caminho complicado, você não pode simplesmente pedir o SSH da sua área de trabalho para o servidor para ser permitido? Se você tiver necessidade disso e você deve estar acessando o servidor, não consigo ver por que você teria o pedido recusado.

    
por 22.02.2018 / 10:00