Aguardando até que o túnel SSH (ssh -w) seja configurado antes de executar o comando

6

Ao usar o tunelamento VPN SSH (opção -w), existe uma maneira de saber quando o túnel está realmente ativo? Eu quero usar isso em um script que configura automaticamente o túnel executando ssh -w e executando o ifup [1].

A opção -f não ajuda porque retorna depois de se conectar ao servidor, mas antes que o túnel esteja ativo. Dormir por alguns segundos funciona, mas é muito hacky.

A opção LocalCommand parece funcionar, por exemplo:

ssh -w 0:1 "-oLocalCommand=ifup tun0" "-oPermitLocalCommand=yes" myserver.example.org true

No entanto, a página man diz: "O comando é executado de forma síncrona e não tem acesso à sessão do ssh (1) que o gerou." A invocação acima é garantida para funcionar ou foi apenas sorte que o LocalCommand tenha sido executado após o túnel ser configurado?

Mais importante, existe uma maneira padrão de usar o ssh -w em scripts?

[1] Eu estou no Fedora, ifup funciona porque eu configurei /etc/sysconfig/network-scripts/ifcfg-tun0 e /etc/sysconfig/network-scripts/route-tun0

    
por imgx64 16.05.2014 / 16:19

1 resposta

1

Então, vejo duas perguntas aqui: 1) Como esperar que o túnel esteja realmente ativo, ou como ele está realmente ativo. 2) Se existe alguma maneira padrão de configurar um túnel ssh no Fedora.

Aproximadamente 1): eu pessoalmente apenas usaria algo como:

timeout=2 # Wait for two seconds for a reply.
ip=192.168.0.1 # Use IP address assigned to tunnel endpoint.
while ! ping -W "$timeout" -c 1 "$ip" &>/dev/null; do
  echo "Waiting for tunnel to be up..."
  sleep 0.5
done
echo "Tunnel is up."

Você pode ficar mais chique usando um for loop com um número configurado de tentativas, ou passar algo como -I tun0 para o comando ping para forçar o uso do dispositivo tun.

Uma razão pela qual eu prefiro essa abordagem é que o fato de ter o próprio túnel não significa necessariamente que a comunicação irá acontecer. Poderia haver perda de pacotes, regras de iptables, erros de configuração de rota, ... Eu tomaria cuidado para garantir que o script fosse eliminado se fosse interrompido e garantir que todos os comandos que exigem o túnel tenham uma estratégia de tempo limite / nova tentativa.

Cerca de 2): Não conheço nenhum mecanismo pronto para configurar túneis ssh em qualquer distribuição. Isso não significa que eles não existam. No passado, eu usei autossh .

    
por 24.06.2014 / 19:31

Tags