sintaxe para configurar túneis ssh

0

Eu não posso envolver minha cabeça em torno dos parâmetros ssh para configurar túneis ssh. Hoje eu pesquisei esses dois comandos por encaminhamento local.

ssh -f -L 2222:myserver.com:22 localhost -N
ssh -f -L 2222:localhost:22 myserver.com -N

O resultado parece ser o mesmo para ambos.

Existe alguma diferença em como eles funcionam?

    
por WeatherForecastingRat 27.04.2017 / 23:37

2 respostas

1

Sim, existem diferenças quando localhost e myserver.com resolvem endereços diferentes (máquinas diferentes).

Como seus exemplos usam a porta 22 , que é uma porta padrão para SSH, alterei esse número para 222 em minha resposta. O objetivo é informar a diferença entre a conexão SSH da operadora (para a porta 22 por padrão) e o destino do túnel SSH.

The result seems to be the same for both of them.

Para deixar claro para os futuros leitores: os dois comandos fazem com que os dados que entram em localhost:2222 vão para o processo que escuta na porta 222 ( 22 na pergunta original) na máquina myserver.com . Estamos falando de portas TCP aqui.

1.

ssh -f -L 2222:myserver.com:222 localhost -N

Com este comando

  • você precisa de acesso SSH ao localhost ;
  • a conexão SSH é local, portanto, qualquer criptografia fornecida é apenas um trabalho computacional desnecessário;
  • o servidor SSH transmite os dados para o remoto myserver.com:222 exatamente quando entra na porta local 2222 , então não há criptografia adicional neste estágio (os dados que entram na porta local 2222 pode ou não ser criptografado de antemão, isso é independente);
  • myserver.com vê a conexão com sua porta 222 como proveniente do exterior (de seu host local que não é deles localhost ), então a porta 222 não deve ser bloqueada pelo firewall lá .

Se você fizer sua conexão diretamente com myserver.com:222 em vez de localhost:2222 , o resultado deverá ser o mesmo porque myserver.com não indicará a diferença. É por isso que considero este primeiro comando quase inútil. (Por que "quase"? - Vou explicar no final.)

2.

ssh -f -L 2222:localhost:222 myserver.com -N

Neste caso

  • você precisa de acesso SSH a myserver.com ;
  • a conexão SSH vai para outra máquina, todos os dados são criptografados neste estágio ;
  • o servidor SSH descriptografa os dados encapsulados e os transmite para seu próprio localhost , ou seja, localmente na mesma máquina;
  • myserver.com vê a conexão à sua porta 222 como proveniente de si mesma (localmente) e isso deve passar pelo firewall porque é incomum bloquear conexões locais; o processo de escuta pode até ouvir apenas na interface de loopback.

Está bem claro para mim que este segundo comando é o superior.

Um cenário em que o primeiro comando pode ser útil: se outro (terceiro) computador precisar acessar myserver.com:222 e não tiver rota, conectando-se à porta 2222 de seu host local (que não é seu localhost ) pode ser uma solução. Observe que isso exige a opção -g para o comando ssh (consulte man ssh para saber mais). Você pode usar qualquer um dos dois comandos para essa finalidade, mas se você não tiver acesso SSH a myserver.com , o segundo comando não funcionará.

Bem, pode-se construir um túnel inteiramente a partir do terceiro computador. O comando seria:

ssh -f -L 2222:myserver.com:222 ssh-server -N
# then connect to their own localhost:2222

Obviamente, isso requer acesso SSH a ssh-server (seu localhost ). Mas vamos supor que o terceiro computador pertence ao seu amigo sem acesso SSH a ssh-server . Você (com o acesso) pode construir o túnel para eles com o primeiro comando e a opção -g . Eles devem se conectar a ssh-server:2222 então.

    
por 28.04.2017 / 01:51
0

O efeito líquido é o mesmo, você acaba com um túnel da porta 2222 on localhost para a porta 22 on myserver.com , mas eles funcionam um pouco de forma diferente. No primeiro exemplo você está fazendo ssh localhost e adicionando alguns flags, então, fundamentalmente, você está logando em localhost novamente. No segundo exemplo, no entanto, você está executando ssh myserver.com com alguns sinalizadores, portanto, você está criando uma conexão com o host remoto.

-L toma (aqui) 3 argumentos, a porta na máquina local que é uma extremidade do túnel, o host (depois que a conexão é estabelecida) na outra extremidade que é o alvo do túnel, e finalmente a porta na extremidade remota do túnel.

Se você encapsular para localhost e criar um encapsulamento para myserver.com , você terá uma conexão para, bem, myserver.com . Se, por outro lado, você se conectar a myserver.com e encapsulamento a localhost do lado remoto da conexão, você terá uma conexão, novamente, com myserver.com .

Assim, o efeito final acaba sendo o mesmo, mas o host para o qual o ssh deve autenticar (para configurar o túnel) é diferente.

    
por 28.04.2017 / 01:42