
Tenho uma máquina remota atrás de um firewall à qual desejo me conectar por meio de SSH. Pelo que entendi, isso pode ser conseguido usando um túnel SSH reverso.
Então o comando que estou usando é
ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa.pub [email protected]
Meu principal problema é que desejo executar este comando sempre que o computador for inicializado, para que ele fique acessível após uma reinicialização.
Tentei usar o cron adicionando o comando crontab do meu usuário e in /etc/cron
. No entanto, o problema que tenho é que ambos os comandos exigem uma senha. Criei the id_rsa.pub
o arquivo e enviei-o para o servidor remoto, mas ainda assim parece não funcionar.
Se eu estiver logado (por exemplo, através do teamviewer), posso executar o comando e nenhuma senha será solicitada. Se eu executar o comando como root ( sudo
), a senha (vazia) do arquivo rsa será solicitada. Suspeito que meu problema esteja aqui, ou seja, quando o cron executa o comando o ssh pede a senha e o comando trava.
Tentei usar o arquivo rsa do meu usuário e o arquivo rsa do root e com nenhum deles consegui me conectar.
Responder1
Basta adicionar 'dormir 60;' antes do seu comando ssh:
@reboot sleep 60;ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]
Após a reinicialização, sua rede ainda está inoperante.
Responder2
Depois de combinar várias fontes, criei um serviço para iniciar automaticamente o canal SSH reverso. Os arquivos de configuração e as etapas necessárias são encontrados neste repositório
Responder3
Uma solução melhor pode serautossh:
"autossh é um programa para iniciar uma cópia do ssh e monitorá-lo, reiniciando-o conforme necessário caso ele morra ou pare de passar o tráfego."
Como diz a citação, isso tem o benefício adicional de fornecer recursos “sempre ativos”.
Responder4
Corrigindo problema de SSH
Você não pode autenticar a máquina remota compúblicochave, você precisa usarprivadochave para fazer isso. A chave pública deve estar no servidor remoto. Se você não tiver certeza, basta copiar a chave pública para o servidor remoto assim:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@remoteserver
e execute seu comando com chave privada:
ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]
Executando este comando na inicialização
Como você já usou o crontab, execute crontab -e
para editar seu cron. Adicione a seguinte linha para executar esse comando assim que o computador inicializar.
@reboot ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]