Como o RPi que está se conectando ao servidor e criando um túnel SSH reverso, você pode executar sshd
no localhost no RPi.
Primeiro, adicione um bind_address
ao comando de túnel inverso, ou seja, execute a chamada ssh
do RPi para o servidor como:
ssh -R localhost:6060:localhost:22 -i path/to/key me@server
Sim, isso é localhost
duas vezes:
-
localhost:22
é onde o tráfego é redirecionado no RPi. -
localhost:6060
é a porta que vai escutar no servidor (você pode ou não desejar que isso esteja no localhost, já que o servidor está disponível na Internet e você provavelmente é o localhost).
Agora, no RPi, você pode adicionar /etc/ssh/sshd_config
ao seguinte:
ListenAddress 127.0.0.1
E reinicie o sshd
.
Agora, o RPi rejeitará as conexões na rede local para a porta 22, porque o soquete está ligado a localhost
(no loopback, uma interface diferente daquela com o IP local), mas responderá ao túnel SSH reverso porque esse soquete se liga explicitamente a localhost
no lado do túnel do RPi.
ssh -p 6060 user@rpi
Conectará do servidor ao RPi normalmente.
Nota: Isso pode ser perigoso, pois não há uma maneira fácil de fazer a resposta RPi às conexões da rede local novamente. A única maneira de consertar as coisas se algo quebrar muito mal é ir até lá e conectar uma tela e um teclado. Sério, teste primeiro, se você digitar um erro em algum lugar, precisará de acesso físico.
Nota 2: A única diferença real entre esta solução e a de Stephen Harris é que o RPi agora rejeitará as conexões para a porta 22. Se você quer isso ou quer que ele aceite as conexões e simplesmente rejeite a autorização, é uma questão de preferência (ou design honeypot :))