O comando para encaminhar a porta 80 da sua máquina local ( localhost
) para o host remoto na porta 8000 é:
ssh -R 8000:localhost:80 oli@remote-machine
Isso requer um ajuste adicional no servidor SSH, adicione as linhas a /etc/ssh/sshd_config
:
Match User oli
GatewayPorts yes
Em seguida, recarregue a configuração executando o servidor sudo reload ssh
.
A configuração GatewayPorts yes
faz com que o SSH ligue a porta 8000 no endereço curinga, para que fique disponível para o endereço público de remote-machine
( remote-machine:8000
).
Se você precisar ter a opção de não vincular tudo no endereço curinga, mude GatewayPorts yes
para GatewayPorts clientspecified
. Como ssh
vincula ao endereço de loopback por padrão, é necessário especificar um vazio bind_address
para vincular o endereço curinga:
ssh -R :8000:localhost:80 oli@remote-machine
O :
antes 8000
é obrigatório se GatewayPorts
estiver definido como clientspecified
e você desejar permitir acesso público remote-machine:8000
.
Trechos manuais relevantes:
ssh (1)
-R [bind_address:] port: host: hostport
Especifica que a porta especificada no host remoto (servidor) deve ser encaminhada para o host especificado e a porta no lado local. Isso funciona alocando um soquete para escutar a porta no lado remoto, e sempre que uma conexão é feita a essa porta, a conexão é encaminhada pelo canal seguro e uma conexão é feita para hospedar o hostport da porta da máquina local. Por padrão, o soquete de escuta no servidor será vinculado apenas à interface de loopback. Isso pode ser substituído, especificando um endereço de ligação. Um endereço bind_ vazio, ou o endereço '*', indica que o soquete remoto deve escutar em todas as interfaces. A especificação de um endereço bind_ad remoto somente será bem-sucedida se a opção GatewayPorts do servidor estiver ativada (consulte sshd_config (5)).
sshd_config (5)
GatewayPorts
Especifica se os hosts remotos têm permissão para se conectar às portas encaminhadas para o cliente. GatewayPorts pode ser usado para especificar que o sshd deve permitir o encaminhamento de portas remotas para se vincular a endereços sem loopback, permitindo assim que outros hosts se conectem. O argumento pode ser 'não' para forçar o encaminhamento de porta remota a estar disponível apenas para o host local, 'yes' para forçar o encaminhamento de porta remota para vincular ao endereço curinga ou 'clientspecified' para permitir que o cliente selecione o endereço ao qual o encaminhamento é vinculado. O padrão é 'não'.
Veja também:
GatewayPorts
foi a bala mágica aqui. Gosto que você tenha encontrado uma versão que me permita limitar essa técnica bastante poderosa a determinados usuários.ssh
comando. Ele configura se outros clientes podem se comunicar com as portas encaminhadas no servidor.-R :8000:127.0.1.1:80
(ou qualquer outro127.x.x.x
endereço). Caso contrário, não, você não poderá aprender o endereço IP remoto.Se o servidor tiver
GatewayPorts no
, você poderá obter o mesmo resultado executandossh -g -L 8001:localhost:8000 oli@remote-machine
no servidor depois de executar ossh -R
comando no cliente. Isso tornará a porta de loopback 8000 no servidor acessível em todas as interfaces na porta 8001.fonte