Mate um túnel SSH após X minutos, mesmo se ainda estiver sendo usado?

3

Estou configurando um túnel SSH em segundo plano para alguns procedimentos de backup. No entanto, estou preocupado com o processo ssh apenas sentado ao redor. No final do meu script eu mato o PID, mas e se algo acontecer ao meu script e ele não terminar. Eu quero algo que seja um pouco mais robusto.

Existe alguma maneira de fazer com que o túnel SSH se mate depois de X segundos / minutos?

No momento estou começando assim

ssh -f -N -L 14880:internalserver:3306 gateway.example.com

E, em seguida, usando o lsof para obter o PID que abriu essa porta.

    
por Rory 23.07.2009 / 11:06

4 respostas

2

Aqui está uma maneira mais clara de fazer isso que foi proposta antes:

ssh -f -N -L 14880:internalserver:3306 gateway.example.com &
PIDSSH=$!
( sleep 600 ; echo "Timeout." ; kill $PIDSSH ) &
PIDSLEEP=$!
wait $PIDSSH
kill $PIDSLEEP && echo "Session ended before timeout"
wait

No entanto, você não recebe um código de erro do ssh, mas isso pode ser providenciado.

    
por 23.07.2009 / 14:57
2

O pacote expect possui o comando timeout como um dos seus exemplos. Você poderia embrulhar todo o seu script com uma chamada para isso.

Ou algo parecido:

ssh -f -N -L 14880:internalserver:3306 gateway.example.com &
PID=$!
nohup "sleep 600; kill $PID" &

    
por 23.07.2009 / 11:14
2

Veja isso:

ssh -f -L 14880:internalserver:3306 gateway.example.com sleep 3m

Isto irá configurar um túnel e permitirá que você conecte em 3 minutos. Se você conectar, estará disponível até que fique ocioso. Isso não matará um processo de backup em execução (espero que seja o que você quer).

    
por 23.07.2009 / 12:27
1

Outra maneira de fazer isso seria definir o valor de tempo limite ocioso em sua sessão. Isso pode ser feito no servidor no sshd_config com o valor "IdleTimeout", ou pelo usuário no arquivo authorized_keys como "idle-timeout = 6m ... key ...". Ou horas. Ou segundos. Seção 8.2.7 no livro "SSSH The Secure Shell" da oreilly. Após a referida quantidade de inatividade (sem entrada), seus processos serão mortos. Como isso é limpo depende de quão bem eles respondem a hups:)

    
por 23.07.2009 / 14:36