youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc
Mais tarde:
you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc
you@homepc$ ssh youatwork@localhost -p 23456
O que você pode fazer é o seguinte: na etapa 1, encaminhe uma porta remota do PC do escritório para o servidor ( 12345
é usado como exemplo, qualquer porta> 1024 deve fazer). Agora, a conexão com o 12345 no servidor deve conectá-lo à porta 22 no officepc.
Na etapa 2, encaminhe a porta 23456 da sua máquina doméstica para 12345 no servidor (de onde é encaminhada para officepc: 22, conforme configurado na etapa 1)
Na etapa 3, você se conecta à porta local 23456 com o login do PC do escritório . Isso é encaminhado pela etapa 2 para a porta 12345 no servidor e pela etapa 1 para o PC do escritório.
Observe que estou usando autossh para encaminhamentos, pois é um wrapper ssh que reconecta automaticamente o túnel, caso seja desconectado; no entanto, o ssh normal também funcionaria, desde que a conexão não caia.
Existe uma possível vulnerabilidade: qualquer pessoa que possa se conectar ao localhost: 12345 no serverpc agora pode se conectar ao officepc: 22 e tentar invadir o site. (Observe que, se você estiver executando um servidor SSH, deverá protegê-lo acima das proteções básicas ativadas por padrão; eu recomendo pelo menos desabilitar o login root e desabilitar a autenticação de senha - veja, por exemplo, isso )
Edit : Eu verifiquei isso com a mesma configuração e funciona. GatewayPorts no
afeta apenas as portas abertas ao mundo em geral, não os túneis locais. É isso que as portas encaminhadas são:
homepc:
outgoing ssh to serverpc:22
listening localhost:23456 forwarded through ssh tunnel
serverpc:
listening ssh at *:22
incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
outgoing ssh to serverpc:22
incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22
Portanto, no que diz respeito à pilha de rede, é todo o tráfego local nas respectivas interfaces de loopback (mais conexões ssh ao serverpc); portanto, GatewayPorts
não está marcado.
Existe, no entanto, a diretiva AllowTcpForwarding
: se isso for no
, essa configuração falhará, pois nenhum encaminhamento é permitido, nem mesmo na interface de loopback.
Advertências :
se estiver usando autossh e ssh recente, convém usar ssh's ServerAliveInterval
e ServerAliveCountMax
manter o túnel ativo . O Autossh tem uma verificação interna, mas aparentemente tem alguns problemas no Fedora. -M0
desativa isso e -oServerAliveInterval=20 -oServerAliveCountMax=3
verifica se a conexão está ativa - tenta a cada 20 s, se falha 3x em uma linha, interrompe o ssh (e o autossh cria um novo):
autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
pode ser útil reiniciar o túnel ssh se o encaminhamento falhar, usando -oExitOnForwardFailure=yes
- se a porta já estiver ligada, você poderá obter uma conexão SSH funcionando, mas nenhum encapsulamento encaminhado.
usar ~/.ssh/config
para as opções (e portas) é aconselhável; caso contrário, as linhas de comando ficam muito detalhadas. Por exemplo:
Host fwdserverpc
Hostname serverpc
User notroot
ServerAliveInterval 20
ServerAliveCountMax 3
ExitOnForwardFailure yes
LocalForward 23456 localhost:12345
Então você pode usar apenas o alias do servidor:
autossh -M0 fwdserverpc