Costumo fazer o encaminhamento de porta para acessar servidores web remotos com este comando:
ssh user@remotehost -L 1234:localhost:1234
Então agora eu posso digitar http://localhost:1234 no meu navegador para acessar o servidor web do host remoto. O que eu quero fazer agora é usar um nome diferente de localhost. Por exemplo, é possível invocar o ssh com algum argumento para que eu possa inserir http://remotealias:1234 no meu navegador para acessar o servidor web remoto? Isso é particularmente útil quando estou executando outros serviços em minha máquina local na porta 1234 ao mesmo tempo (e não quero lembrar de muitos mapeamentos de túnel de porta:host).
Se não for possível apenas com o comando ssh, também estou interessado em soluções que exijam a edição de alguma configuração local em minha máquina para que funcione conforme descrito.
Sim; Você pode fazer um IP por host em sua caixa local
e edite seu arquivo hosts
em seguida, encaminhe cada IP para o IP dos hosts (o acesso direto via domínio seria interrompido pela alteração do arquivo hosts)
em seguida, use seu navegador da Web normalmente
Isso irá encapsular cada fqdn remoto através de seu próprio túnel ssh, em seu próprio ip local.
Quando você faz
no host b.company.com, acontece o seguinte:
localhost
(ou seja, host A novamente) na porta 5678.Portanto, o resultado final é que você pode acessar a porta 5678 no host A usando a porta 1234 no host B.
A razão pela qual você precisa digitar
localhost
é porque o host A também pode ser um "servidor de salto", ou seja, um ponto de entrada em alguma rede protegida. Portanto, se você não pode acessar o host C diretamente do host B, mas pode acessar o host A do host B e o host C do host A, pode fazerque estabelecerá conexões entre o host B e A, e entre o host A e C, e a porta de túnel 5678 no host C para a porta 1234 no host A.
Isso tem duas consequências:
Se você já estiver usando a porta 1234 em seu cliente (host B) para outros serviços, não poderá usá-la para encapsulamento. Você precisa usar uma porta diferente (mas há muito por onde escolher).
No seu navegador, você sempre se conectará ao terminal local do túnel, ou seja,
localhost
. Atribuir nomes a hosts remotos não mudará isso.Então não, o que você quer não funciona assim.
Editar
Caso não tenha ficado claro o suficiente: Você pode facilmente usar números de porta diferentes se já estiver executando serviços locais. Portanto, suponha que você tenha os hosts A, B e C que deseja acessar dessa maneira, todos eles têm serviços na porta 80 e você está executando seu próprio servidor web na porta 80. Então você faz
e você pode acessá-los agora em seu navegador digitando
http://localhost:5000
,http://localhost:5001
, ehttp:/localhost:5002
. Ehttp://localhost:80
ainda acessará seu próprio servidor local.Não há necessidade real de construções complicadas que envolvem a atribuição de muitos endereços IP ou aliases remotos.
Quando você estabelece o encaminhamento de porta por ssh - você configura uma ponte entre a porta
your_machine:port
(perspectiva da sua máquina) e amachine:port
perspectiva da máquina à qual você fez uma conexão.Em outras palavras - se você invocar o comando
ssh user@remotehost -L 1234:localhost:4567
você faz uma conexão ssh para
remotehost
plus se você se conectar à porta1234
em sua máquina (localhost
endereço para você) parte remota de sua conexão ssh tentará fazer conexão comlocalhost
(para si mesmo - como apontará para si mesmo) nalocalhost
portaremotehost
4567
Voltando ao mérito da questão.
Se você tiver outros serviços na porta
1234
de sua máquina, você pode selecionar outra porta que esteja livre em sua máquina.