Autossh na inicialização com o systemd

3

Estou tentando iniciar uma conexão ssh persistente na inicialização com autossh no systemd, seguindo guias como este aqui . Quando faço isso, ele se conecta e, em seguida, desconecta imediatamente, com muito pouca informação nos logs. Meu sistema é (uname -a):

Linux local_machine_name 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux

Ao executar:

autossh -M 0 dbase1

O comando acima resulta em uma conexão estável por vários dias. dbase1 é definido no meu arquivo de configuração, que se parece com (anonimizado):

Host dbase1
HostName x.x.x.x
User serverusername
LocalForward 54320 localhost:5432
ServerAliveInterval 30
ServerAliveCountMax 3
ExitOnForwardFailure yes
ProxyCommand ssh -q [email protected] nc %h %p 2> /dev/null

Eu então criei o seguinte serviço em / etc / systemd / system /

[Unit]
Description=AutoSSH tunnel service
After=network.target
[Service]
Type=simple
User=*username with cert and config file in home/username/.ssh/ folder*
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -vvv -M 0 dbase1
[Install]
WantedBy=multi-user.target

Após recarregar o daemon systemctl e iniciar o serviço, a conexão é feita e, em seguida, desconectada. Aqui está a saída de journalctl -u myautossh.service (a partir da mensagem de boas-vindas do servidor remoto, confirmando uma conexão):

Jul 21 14:38:30 local_machine_name autossh[555]: *** Connection successful, welcome to the remote server! ***
Jul 21 14:38:30 local_machine_name autossh[555]: debug1: client_input_channel_req: channel 2 rtype exit-status reply 
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: rcvd eof
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: output open -> drain
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: obuf empty
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: close_write
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: output drain -> closed
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: rcvd close
Jul 21 14:38:30 local_machine_name autossh[555]: debug3: channel 2: will not send data after close
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: almost dead
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: gc: notify user
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: gc: user detached
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: send close
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: is dead
Jul 21 14:38:30 local_machine_name autossh[555]: debug2: channel 2: garbage collecting
Jul 21 14:38:30 local_machine_name autossh[555]: debug1: channel 2: free: client-session, nchannels 3
Jul 21 14:38:30 local_machine_name autossh[555]: debug3: channel 2: status: The following connections are open:
Jul 21 14:38:30 local_machine_name autossh[555]: #2 client-session (t4 r0 i3/0 o3/0 fd -1/-1 cc -1)
Jul 21 14:38:30 local_machine_name autossh[555]: debug1: channel 0: free: port listener, nchannels 2
Jul 21 14:38:30 local_machine_name autossh[555]: debug3: channel 0: status: The following connections are open:
Jul 21 14:38:30 local_machine_name autossh[555]: debug1: channel 1: free: port listener, nchannels 1
Jul 21 14:38:30 local_machine_name autossh[555]: debug3: channel 1: status: The following connections are open:
Jul 21 14:38:30 local_machine_name autossh[555]: debug1: fd 0 clearing O_NONBLOCK
Jul 21 14:38:30 local_machine_name autossh[555]: debug1: fd 1 clearing O_NONBLOCK
Jul 21 14:38:30 local_machine_name autossh[555]: debug3: fd 2 is not O_NONBLOCK
Jul 21 14:38:30 local_machine_name autossh[555]: Transferred: sent 3372, received 3384 bytes, in 0.7 seconds
Jul 21 14:38:30 local_machine_name autossh[555]: Bytes per second: sent 4633.6, received 4650.1
Jul 21 14:38:30 local_machine_name autossh[555]: debug1: Exit status 0

Observar / var / log / syslog apenas adiciona essa linha adicional (após a conexão bem-sucedida do servidor e as mensagens de erro acima):

Jul 21 14:38:30 local_machine_name autossh[555]: ssh exited with status 0; autossh exiting

Alguém sabe por que se desconecta?

    
por fifthace 21.07.2017 / 16:54

2 respostas

3

O problema parece ser que dentro do systemd você não terá stdin, então o comando ssh conecta então tenta ler a entrada e pára no eof. A opção ausente é -N :

ExecStart=/usr/bin/autossh -vvv -N -M 0 dbase1

Se você tiver o OpenSSH 5.4 ou posterior, poderá substituir o uso do netcat nc pelo equivalente interno ssh -W :

ProxyCommand ssh -q -W %h:%p [email protected]
    
por 22.07.2017 / 18:34
1

O serviço provavelmente está tentando iniciar antes que a rede esteja ativa. Tente substituir After=network.target por After=network-online.target .

Consulte a página NetworkTarget no wiki do systemd para obter mais informações sobre a distinção.

    
por 21.07.2017 / 19:25