Start call-home túnel reverso do SSH na reinicialização da Debian

1

Eu tenho 3 scripts de shell que cada um contém um loop while while e "chama" para casa para abrir um túnel ssh reverso. Os túneis funcionam.

Eu pesquisei por aí, mas não tenho certeza do que funcionará para isso. Minha principal preocupação é que o loop no script bloqueie a inicialização e ative e esqueça.

Atualmente não tenho acesso físico à máquina remota, por isso não posso brincar para ver se funciona, preciso de algo que funcione e continue a trabalhar.

Minhas esperanças para essa pergunta é um guia passo-a-passo, já que não estou muito confiante em mexer com as coisas necessárias para que isso funcione.

    
por CS. 28.04.2012 / 17:16

1 resposta

1

Costumava ser o caso de você poder fazer uma chamada para cada um desses scripts em uma entrada de 'respawn' na parte inferior do / etc / inittab, e acabar com isso. Simples. Mas desde que o Debian passou a usar o upstart ao invés do init, e o inittab obsoleto, as coisas ficaram mais complicadas e frágeis. Você precisará escrever um arquivo de configuração inicial; aqueles que entram em / etc / init, e são mais fáceis de errar.

O que você pode fazer é através do conteúdo de / etc / init / * procurando por configurações existentes que usam a palavra-chave respawn, e que iniciam algum daemon de rede - estas devem ter dependências declaradas que asseguram que a rede esteja já em cima. Copie e modifique um desses para cada um dos seus túneis. A convenção é colocar suas próprias configurações em / etc / init / local / *. Você pode ser capaz de remover parte da fragilidade iniciando seus túneis mais cedo durante a inicialização e apenas permitindo que eles sejam interrompidos, interrompidos, expirados ou o que quer que seja, quando a rede ainda não estiver ativada. O "respawn" irá eventualmente reanimá-los, possivelmente após um intervalo mais longo, se eles tentarem novamente várias vezes antes.

Desde que você esteja usando o 'respawn', você está relativamente a salvo de interromper o processo de inicialização - mas com o upstart, tudo é possível; sua maior flexibilidade significa que os erros de configuração podem travar a inicialização de maneiras menos óbvias; inspeção visual não é mais tão confiável quanto era com o inittab.

A propósito, você provavelmente não precisa desses scripts 'while true'. Eu costumo usar 'autossh' para iniciar e gerenciar esses tipos de túneis. Ele tende a ser mais confiável do que um script típico, e o comando autossh pode ser colocado diretamente em um arquivo de configuração / etc / init.

Hesito em fornecer um exemplo de arquivo de configuração, porque as configurações de inicialização podem ser diferentes o suficiente para que o que funciona para mim não funcione para você (mais do que isso). Mas aqui está uma das minhas configurações de autossh - isso pode entrar, digamos, em /etc/init/local/autossh-example.conf. Você notará que eu não estou declarando explicitamente qualquer dependência em qualquer configuração de rede - estou esperando que o 'respawn' cause novas tentativas até que a rede esteja lá. Você vai querer testar isso localmente em uma máquina idêntica antes de confiar em sua máquina remota:

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /usr/bin/autossh -R 20042:127.0.0.1:22 -N foo.example.com
    
por 28.04.2012 / 18:24