fazendo uma conexão SSH reversa no boot

5

Eu tenho um PC atrás de um NAT que faz uma conexão SSH reversa com o meu VPC Digitalocean. Eu utilizo esta conexão SSH invertida em casa para fazer o login no PC do meu escritório (estou autorizado a fazê-lo) e copio arquivos e faço outras coisas importantes.

Embora não seja frequente, notei que o PC do meu escritório reinicia (devido a falhas de energia, etc.) e interrompe a conexão SSH invertida que ele fez com o meu VPC. Nesse tipo de casos, não consigo me conectar do meu PC doméstico ao meu PC do escritório.

Eu corro o seguinte script para fazer a conexão reversa + proxy dinâmico anonimizar meu tráfego (como não sou necessário para compartilhar informações de navegação) gerado no PC do escritório.

autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC

Não há nenhuma maneira de executar este script novamente no PC do meu escritório quando reiniciar, pois não estou fisicamente lá. Para resolver este problema, instalei o seguinte crontab.

Nota: o arquivo rev.sh contém a linha acima. O certificado "digitalOcean" e rev.sh estão localizados em Ubuntu home . Portanto, quando eu executo ./rev.sh no meu terminal Ubuntu eu obtenho um proxy dinâmico e também acesso ao seu servidor DigitalOcean. Este método funciona 100%.

No entanto, quando eu instalo o chrontab no seguinte método, o My ubuntu PC nunca faz um proxy dinâmico. Eu posso ver isso porque quando eu verificar este proxy do Google Chrome, ele diz que o proxy está recusando a conexão.

Aqui estão as obras que eu tentei como raízes. Eu também tentei isso como um usuário normal, mas eles não funcionaram.

@reboot bash /home/user/rev.sh 
@reboot /home/user/rev.sh 
@reboot cd /home/user && ./rev.sh

Eu então instalei um chrontab alguns minutos antes da hora atual e esperei que ele fosse executado.

24 12 8 * * * bash /home/user/rev.sh
24 12 8 * * * /home/user/rev.sh

estes também não foram executados.

Por favor, seja gentil o suficiente para me ajudar a identificar o meu erro. Há muitas perguntas semelhantes neste site sobre o meu problema. Eu já mencionei muitas respostas, mas nenhuma delas pareceu ajudar.

    
por Dina 17.11.2016 / 09:27

5 respostas

4

Não tenho certeza se usar cron para executar um script na inicialização é uma boa ideia. Uma alternativa que vejo mais adequado é criar um serviço de SystemD, conforme descrito aqui . Crie um arquivo chamado /etc/systemd/system/autossh.service :

[Unit]
Description=Auto Reverse SSH
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service
[Service]
ExecStart=/full/path/to/autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
[Install]
WantedBy=multi-user.target

Em seguida, execute o seguinte comando como root:

systemctl enable autossh.service
    
por 22.11.2016 / 14:17
1

Algumas coisas que você pode experimentar:

chmod +x rev.sh

Às vezes, seu caminho não é totalmente definido no momento da inicialização ou através de cronjobs, portanto, substitua o autossh pelo caminho completo, no meu sistema que é

/usr/bin/autossh

@reboot motif depende do tempo de inicialização do daemon cron, portanto ele pode ser chamado antes de outros subsistemas (rede?) estarem ativos e em execução

E o seu exemplo de crontab:

24 12 8 * * * bash /home/user/rev.sh

só invocará no dia 8 de cada mês. E tem um campo extra. Experimente

24 12 * * * /home/user/rev.sh
    
por 17.11.2016 / 09:47
1

Parece que, quando o script é executado via crontab, ele não consegue encontrar seu certificado.

Quando você executa o script, ele usa o certificado de /home/ubuntu-user/.ssh / ... No entanto, quando o script é executado a partir do crontab, ele é executado como root. root pega os certificados de /root/.ssh

Você tem várias maneiras de fazer isso funcionar, mas acho que executar o script como ubuntu-user no crontab faz isso.

Editar:

certifique-se de fornecer um caminho completo qualificado para o certificado

    
por 22.11.2016 / 14:36
1

Tente usar su :

su -l user -c /home/user/rev.sh

Ajudará com o seu problema?

    
por 22.11.2016 / 15:33
0

como a pergunta não tem tantos dados, vou começar do zero com o que eu faria

Eu colocaria todas as configurações em / etc / ssh / ssh_config:

 Host mytunnel
    HostName      IPofDigitalOcean
    User          root     # Are you sure about this??
    IdentityFile  /etc/ssh/mytunnel_key
    RemoteForward 8081 localhost:22
    DynamicForward 8080

Eu colocaria a chave em /etc/ssh/mytunnel_key

então eu tentaria com uma entrada cron (um serviço upstart / systemd seria melhor) assim:

@reboot /usr/bin/autossh -f -M 0 -T -N mytunnel
    
por 24.11.2016 / 19:48