Porta de túnel com segurança através do host intermediário

23

Estou procurando encaminhar uma porta para o VNC de volta para minha casa aqui. Eu tenho que pular um único host para pular para a minha máquina de trabalho real.

  • sittinghere será minha máquina local
  • hopper vai pelo salto intermediário eu preciso fazer
  • overthere será a máquina de trabalho remota

Eu posso fazer isso com o SSH na minha máquina de trabalho:

ssh -t hopper "ssh -t overthere"

Gostaria de usar o encaminhamento de porta para encaminhar a porta remota 5900 overtherepara a porta local 5900 sittinghere. No entanto, eu preferiria fazê-lo sem vincular abertamente a uma porta, hopperpois qualquer pessoa nessa máquina seria capaz de se conectar à minha conexão VNC.

Existe alguma maneira de eu encaminhar essa porta para minha máquina local com segurança, sem que ninguém possa ter acesso a ela hopper?

Naftuli Kay
fonte
Qual cliente VNC você está usando?
Slm

Respostas:

18

Usando a capacidade nativa do SSH para encaminhar portas. De sittinghereexecutar:

 ssh -v -N -L 5900:overthere:5900 user@hopper

Aponte para o seu cliente VNC localhost:5900e o tráfego será direcionado para overthere:5900a conexão SSH estabelecida emhopper

Angra
fonte
1
AFAIK, esta solução não ajudará se o 5900 estiver vinculado apenas na interface local (127.0.0.1), como acontece no túnel hopper, e depois hopperencaminha todo o tráfego para overthere:5900. Se overthere:5900estiver ouvindo 0.0.0.0ou a interface fornecida, ele funcionará, mas não se estiver ouvindo 127.0.0.1.
Naftuli Kay
18

Acabei usando alguns ~/.ssh/confighacks SSH para fazer isso acontecer:

Host hopper
    User naftuli
    ForwardAgent yes

Host overthere
    User naftuli
    ForwardAgent yes
    ProxyCommand ssh -q hopper nc overthere 22

O que isso faz é que, quando tento conectar-me a ssh overtherepartir de sittinghere, ele se conecta hoppere proxies a conexão SSH à porta 22 ligada overthere(ou seja: SSH ativado overthere).

Isso tem alguns efeitos colaterais impressionantes:

ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"

Tudo funciona muito bem e, até onde sei, o 5900 não está aberto hopper, apenas encaminhado diretamente de overtherepara sittinghere.

Naftuli Kay
fonte
Aliás, eu deveria ter perguntado isso nos comentários antes, mas a solução que você encontrou está fora da página de manual do x11nvc 8-). Desculpe, não pensei em perguntar qual servidor VNC você estava usando.
Slm
Isso me assusta demais, mas definitivamente funciona!
Dale Anderson
1
Em algumas distribuições Linux (por exemplo, Ubuntu 14.04), o netcat-openbsd é instalado por padrão. Nesse caso, esse hack pode não funcionar. Para corrigir esse problema, você deve primeiro instalar o pacote netcat-traditional ( apt-get install netcat-traditional -y). Em seguida, você deve especificar explicitamente o nctipo no arquivo de configuração (substituindo ncpor nc.traditional).
VeLKerr
@Naftuli: Incrível mesmo!
foi
1
@AlexanderPozdneev netcat .
precisa saber é o seguinte
1

Você pode encaminhar uma porta sittinghereda overthereporta SSH 's através hopper. Então você pode usar essa porta para acessar overtherediretamente de sittinghere. Nesta segunda sessão SSH, você pode encaminhar o VNC ou qualquer outra porta que desejar, enquanto hoppervê apenas uma sessão SSH criptografada.

Primeira sessão SSH:

ssh -f -N -L 7022:overthere:22 hopper

Agora diga ao cliente SSH como ele pode ser alcançado overthereadicionando esta configuração ~/.ssh/configemsittinghere

Host overthere
    HostName hopper
    Port 7022
    HostKeyAlias overthere

Segunda sessão SSH:

ssh -f -N -L 5900:localhost:5900 overthere

Ou apenas uma sessão SSH interativa regular sem o túnel da porta VNC:

ssh overthere

Se você não quiser se preocupar em adicionar linhas, ~/.ssh/configainda pode dizer como se conectar a overtherepartir da linha de comando:

ssh -p 7022 hopper

... mas sem o HostKeyAliasSSH, não verificará overtherecorretamente a impressão digital da chave.

Todas as linhas de comando devem ser executadas sittinghere.

Aliás, acho que você provavelmente não precisa usar ssha -topção.

Celada
fonte
1

Primeiro conecte a tremonha enquanto faz um túnel entre o trabalhador e o PC doméstico.

ssh -f ismail@hopper -L 2222:overthere:22 -N

então faça ssh ro overthere com túnel vnc

ssh -p 2222 -f ismail@localhost -L 5900:localhost:5900

Agora você pode se conectar com o vnc. A propósito, altere a configuração do vnc para ouvir localhost

ibaydan
fonte
0

Se você estiver usando o cliente VNC a vncviewerpartir da linha de comando, poderá usar o -viacomutador para fazer um túnel user@hostantes de conectar-se ao servidor VNC de outro host.

Exemplo

$ vncviewer -via user@host localhost:0

Você também pode usar vinagrepara conectar-se através de um túnel SSH como esse através da GUI. Para fazer isso, configure sua conexão de maneira semelhante a esta através da caixa de diálogo de conexão em vinagre:

              ss # 1

O que resultará na conexão da sua conexão, em túnel através do host do túnel SSH.

    ss # 2

Referências

slm
fonte
0

O comando a seguir também deve funcionar perfeitamente

ssh -f -N -J hopper overthere -L 5900:localhost:5900

Foi testado com parâmetro adicional para conectar o servidor PostgreSQL postgres-serverna porta personalizada ( -pswitch) e também com o uso de nome de usuário personalizado.

ssh -f -N -J user1@jumphost -p 2222 user2@postgres-server -L 5432:localhost:5432

Como você pode ver, a solução é simples e não requer nenhuma alteração na configuração do ssh ou nenhuma etapa intermediária.

SimonB
fonte