Como atribuir um nome de host ao túnel SSH

16

Estou usando ssh [email protected] -g -L 4321:localhost:28017 para estabelecer um túnel do meu MacBook para o meu servidor dedicado no meu provedor de hospedagem. Isso funciona bem. Agora eu quero acessar vários sites de administração no servidor remoto (uma página de status do MongoDB, uma página do RabbitMQ etc., todas em portas diferentes). Todos eles estão vinculados a 127.0.0.1 na máquina remota. Como posso ajustar este comando ssh para

  • atribua um nome ao túnel e use, por exemplo, "my.tunnel.name" no meu navegador
  • ser capaz de definir a porta remota no meu navegador; Gostaria de me conectar ao my.tunnel.name:port, para poder chamar os diferentes sites

Isso é possível com o ssh? Eu li as páginas de manual e pesquisei por dois dias agora, mas parece que não funciona.

--edit 2012-06-01 23: 36-- Graças às respostas e comentários fornecidos, o encaminhamento de porta funciona agora usando

ssh [email protected] -D 4321

Posso configurá-lo como proxy no meu navegador e o navegador tratará qualquer solicitação para localhost: anyport como se tivesse sido feita no servidor remoto. Agora, não é necessário usar um nome, pois o navegador é apenas para sites de servidores remotos.

brains_at_work
fonte

Respostas:

12

O que você descreve não é possível. Mas ainda há boas notícias:

No entanto, é possível estabelecer uma conexão dinâmica com o servidor SSH. Isso abrirá uma porta no computador local para a qual você pode apontar a configuração de Proxy do seu navegador e permitir que você use o encapsulamento como um servidor proxy. Mas você deve digitar um nome de host / ip e porta no navegador como se o navegador estivesse em execução na máquina em que o servidor SSH está ativado.

O comando se parece com o seguinte: ssh [email protected] -D 1234
aponte o proxy do seu navegador para localhost:1234.

Portanto, se você entrar no Servidor A e quiser se conectar ao servidor B, digite no navegador o endereço que digitaria em um Navegador em execução no Servidor A. Se um navegador em execução no servidor A não conseguir se conectar ao Servidor B (se o processo no servidor B apenas escuta em 127.0.0.1) e você ainda não conseguiu se conectar. Parece que você tem apenas um servidor, mas eu queria ter certeza de que isso estava claro.

Se você tiver apenas um servidor, encapsulá-lo nele com a conexão dinâmica, defina seu proxy. Você poderá digitar "localhost: 1234" (por exemplo) no navegador e ele se conectará ao serviço em execução no servidor remoto na porta 1234.

Nota do Securit: Nunca, nunca, nunca configure um servidor no qual o root possa fazer o SSH! Falha grave de segurança. Crie uma conta de usuário normal (com permissão para su ou sudo) e faça o SSH como esse usuário.

Chris S
fonte
2
Você está usando -L 1234 (encaminhamento de porta local) quando deve usar -D 1234 (encaminhamento de porta dinâmico). E talvez também evite usar -g, -g significa que os hosts remotos podem se conectar ao seu encaminhamento, o que não é o que você deseja se estiver fazendo isso na sua estação de trabalho.
Mattias Ahnberg
Obrigado Chris. Eu já tentei isso. Não posso usar o comando ssh apenas com uma porta especificada. Ele retorna um erro: "Má especificação de encaminhamento local '1234'"
brains_at_work
@ Matthias-Ahnberg: Ótimo, isso fez o truque. com o encaminhamento dinâmico, agora posso usar a porta como proxy e host local: algumas chamadas de porta são direcionadas ao servidor remoto.
brains_at_work
@MattiasAhnberg Uau, que peido cerebral. Obrigado pela correção.
Chris S
Eu segui esse processo, mas recebi o erro "A conexão foi redefinida" no firefox.
rivu
23

Você pode atribuir um nome usando o fato de que seu adaptador de loopback responderá basicamente a qualquer endereço na rede 127.0.0.0/8.

Portanto, em vez de vincular a porta 4321, você pode vincular a 127.1.2.3:4321. Em seguida, basta configurar uma entrada de host que mapeie um nome para o endereço de loopback que você usou para que foo.bar mapeie 127.1.2.3.

Na minha configuração SSH na minha estação de trabalho administrativa, tenho muitos túneis configurados para que eles se liguem a algum endereço no intervalo de loopback, e tenho entradas no meu arquivo host, por isso abro muitos túneis em paralelo usando a mesma porta e distinguo entre eles via nome.

Então, se você se conectar assim

ssh [email protected] -g -L 127.1.2.3:4321:localhost:28017

E o seu arquivo hosts tem uma linha como esta.

127.1.2.3 my.tunnel.name

Então você deve conseguir se conectar ao my.tunnel.name:4321 na sua máquina local.

Se você tiver espaço de endereço IP adicional na rede ao qual o cliente ssh está conectado, você poderá atribuir um endereço secundário à sua interface Ethernet e usar um dos seus IPs reais e, em seguida, configurar entradas no DNS se desejar que outros sistemas possam para usar seu túnel SSH.

A opção -L -L [bind_address:]port:host:hostportpermitirá que você use qualquer endereço IP válido no sistema local ao qual se conectar. Você também precisa incluir a -gopção se quiser que outros hosts possam se conectar através do seu túnel ssh.

Zoredache
fonte
Eu tive que adicionar os ips ao meu loopback no osx. ifconfig l0 alias 127.0.1.1 255.255.255.0caso contrário, ótima dica!
devians
1
Se você não deseja que um shell seja criado, execute -Nno final do comando. Dessa forma, é mais fácil lembrar que é um túnel, não apenas qualquer conexão SSH.
mlissner
Ao usar 127.1.2.3, tive que fazer isso no meu macbook:, ifconfig lo0 alias 127.1.2.3 255.255.255.0que adiciona 127.1.2.3como um novo endereço na interface lo0.
quer
5

Crie um encaminhamento de porta dinâmico no nível do aplicativo (proxy de meias basicamente) com seu túnel SSH e aponte seus aplicativos para esse. Para criar um túnel dinâmico, conecte-se da seguinte maneira:

ssh [email protected] -D 127.0.0.1:31337

Em seguida, configure seu aplicativo para usá-lo como um proxy SOCKSv5.

Se você deseja um nome de host vinculado a isso, basta adicionar /etc/hostsentradas que aponte para 127.0.0.1, mas uma maneira mais bonita seria adicionar 127.0.0.2 para o primeiro túnel e uma entrada de hosts para esse, 127.0.0.3 para o segundo túnel e uma entrada de host separada para esta, etc. Se você adicionar aliases para 127.0.0.1, algumas vezes esse alias aparecerá em outras pesquisas de comandos do localhost, o que pode ser confuso!

Para usá-lo sem problemas em um navegador da web, você pode usar um complemento de proxy, como exemplo, sou a favor do navegador da web Chrome e, para este, utilizo um complemento chamado Proxy Switchy!. Você pode fazer o download aqui:
https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj

Na configuração desse complemento, eu posso definir vários proxies separados e vincular expressões regulares de hosts / URLs para usar certos proxies, dessa forma eu sempre serei redirecionado corretamente pelos túneis certos, sem precisar alternar manualmente. Entre em contato se precisar de mais esclarecimentos sobre alguma das etapas!

Mattias Ahnberg
fonte
Obrigado pela dica de complemento. Como também uso o Chrome, não preciso manter o FireFox aberto também.
brains_at_work