O script shell termina a conexão do servidor, mas deixa a conexão aberta

0

Estou criando / executando um script de shell do servidor linux / Fedora que está renomeando vários dispositivos para padrão. Uma vez que ele faz o primeiro dispositivo, trava porque a conexão não está fechando. o script está padronizando os ips e reinicia o serviço de rede. Como posso fechar a conexão enquanto ela é executada no dispositivo?

Aqui está o script que os redefine.

/bin/ssh $CHECKME -o ConnectTimeout=5 "/usr/local/bin/NameTerm.sh reset"

O CHECKME é de onde recebo os ips dos dispositivos conectados e funciona bem. O NameTerm.sh é um script de shell que define o endereço IP de volta para 0.0.0.0 e, em seguida, reinicia a rede de serviço. Eu não posso alterar o script.

    
por Micah 17.01.2018 / 13:41

1 resposta

1

Se o servidor SSH desaparecer, a conexão TCP ainda estará ativa do ponto de vista do cliente, e o cliente SSH o aguardará por padrão.

A opção ConnectTimeout não faz diferença, de acordo com o nome, é usada quando conectando , não quando a conexão já está ativa.

Em vez disso, você provavelmente deseja usar ServerAliveInterval e ServerAliveCountMax :

ServerAliveCountMax

Sets the number of server alive messages (see below) which may be sent without ssh(1) receiving any messages back from the server. If this threshold is reached while server alive mes‐ sages are being sent, ssh will disconnect from the server, terminating the session.

ServerAliveInterval     

Sets a timeout interval in seconds after which if no data has been received from the server, ssh(1) will send a message through the encrypted channel to request a response from the server. The default is 0, indicating that these messages will not be sent to the server.

Isso esperaria cerca de 3x5 = 15 segundos, embora ServerAliveCountMax esteja definido como 3 por padrão, portanto, você só precisa definir ServerAliveInterval .

ServerAliveCountMax 3
ServerAliveInterval 5
    
por 17.01.2018 / 14:59