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

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

Contexto

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

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

Verifiquei que posso fazer ssh do servidor S para minha máquina desktop D (o oposto do que preciso).

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

Responder1

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 estiver configurado, você pode simplesmente usar ssh para seu servidor remoto usando o seguinte comando:

$ ssh -p 1234 user@localhost

Observe que você precisa configurar chaves ssh para login automático (sem solicitação de senha). Se quiser criar o túnel SSH de forma interativa, você pode remover as opções -f -N. Para mais informações, man ssh.

Responder2

Se você estiver executando uma versão mais recente do OpenSSH (7.3+), poderá usarProxyJumpque cozinha tudo junto magicamente:

ssh -J windows_machine remote_server

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

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

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

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

Eaindaapenas corra ssh remote_serverpara chegar lá.


Se você estiver executando uma versão mais antiga do SSH, useComando Proxy- isso permite que você diga ao SSH para primeiro executar 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 o SSH-Copção, que é uma abreviação para o mais misteriosoSintaxe do netcat.

Observe que, como quando você executa ssh remote_servervocê está agora no windows_machinevocê precisa garantir que você usa o IP doremove_server da caixa de saltoem vez do IP da sua máquina - estes podem ser os mesmos.

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

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

Isto significa que seremote_server éuma máquina diferente como vista windows_machineentão você pode colocar isso na configuração e ainda assim usar ssh remote_server.

Responder3

Em vez de tentar contornar as coisas e criar um caminho complicado, você não pode simplesmente pedir que o SSH do seu desktop para o servidor seja permitido? Se você precisar disso e deveria estar acessando o servidor, não consigo entender por que você teria a solicitação recusada.

informação relacionada