Problemas com o Autossh: executando do terminal cron vs

1

Estou tentando configurar um túnel reverso confiável entre um servidor e várias caixas de cliente. Estou usando o autossh para restabelecer conexões se elas forem interrompidas ou ficarem obsoletas, mas estou tendo alguns problemas.

O SERVIDOR: O servidor tem um IP dinâmico que está vinculado a um serviço DDNS. Estou esperando que o argumento '-o' CheckHostIP = no "'no SSH previna problemas quando o IP do servidor for alterado. O servidor obtém o SSH através do encaminhamento de porta do seu roteador de gateway. Conexões de entrada na porta do roteador 3141 vão para a porta do servidor 22.

OS CLIENTES: Cada um dos clientes obtém uma porta de monitoramento autossh diferente e a porta do túnel reverso a partir de um arquivo de configuração. Um script python lê o arquivo cfg e cria um cmd autossh que é executado com "os.system (cmd)". Cada um deles tem a mesma chave que eles usam para entrar no servidor. Atualmente, o comando AutoSSH é executado a partir do cron na reinicialização e todas as saídas são registradas em um arquivo de texto. O comando é:

autossh -v -M 23000 -N -o "CheckHostIP=no" -o "ExitOnForwardFailure=yes" -o "ServerAliveInterval=10" -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i /home/client1/.ssh/id_ed25519 -R 22000:localhost:22 [email protected] -p 3141

O comando funciona bem quando chamado no terminal, mas não funciona no cron.

DO CRON:

OpenSSH_6.7p1 Raspbian-5+deb8u1, OpenSSL 1.0.1k 8 Jan 2015
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to server.org [x.x.x.x] port 3141.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file /home/user/.ssh/id_ed25519 type 4
debug1: key_load_public: No such file or directory
debug1: identity file /home/user/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.7p1 Raspbian-5
debug1: match: OpenSSH_6.7p1 Raspbian-5 pat OpenSSH* compat 0x04000000
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr [email protected] none
debug1: kex: client->server aes128-ctr [email protected] none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 82:dd:b6:88:33:00:bb:aa:ee:08:7b:19:01:ae:da:34
debug1: Host '[server.org]:3141' is known and matches the ECDSA host key.
debug1: Found key in /root/.ssh/known_hosts:2
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
SERVER: Server hello message
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering ED25519 public key: /home/user/.ssh/id_ed25519
debug1: Server accepts key: pkalg ssh-ed25519 blen 51
debug1: Authentication succeeded (publickey).
Authenticated to server.org ([x.x.x.x]:3141).
debug1: Local connections to LOCALHOST:23000 forwarded to remote address 127.0.0.1:23000
debug1: Local forwarding listening on 127.0.0.1 port 23000.
debug1: channel 0: new [port listener]
socket: Address family not supported by protocol
debug1: Remote connections from LOCALHOST:23000 forwarded to local address 127.0.0.1:23001
debug1: Remote connections from LOCALHOST:22000 forwarded to local address localhost:22
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: remote forward failure for: listen 23000, connect 127.0.0.1:23001
Error: remote port forwarding failed for listen port 23000

Se eu executar o mesmo comando do terminal, a saída será a mesma, exceto pelas últimas linhas:

socket: Address family not supported by protocol
debug1: Remote connections from LOCALHOST:23000 forwarded to local   address 127.0.0.1:23001
debug1: Remote connections from LOCALHOST:22000 forwarded to local address localhost:22
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: remote forward success for: listen 23000, connect 127.0.0.1:23001
debug1: remote forward success for: listen 22000, connect localhost:22
debug1: All remote forwarding requests processed

Alguma idéia de por que não está funcionando no cron? Como posso executá-lo na inicialização e ficar de olho nele?

EDITAR: Chamar "ps aux | grep autossh" após a reinicialização do cliente mostra que o comando autossh do python não está em execução. O arquivo de log termina com a mensagem "Erro: encaminhamento de porta remota falhou" e não continua tentando. Este é um problema python, problema autossh ou problema cron?

    
por RedM 04.04.2016 / 11:13

2 respostas

0

Ok, o problema era ter as portas abertas no servidor após desconexões não limpas. Todo o terminal / cron / python era apenas eu perseguindo o problema em um buraco de coelho.

De qualquer forma, aqui está uma boa resposta: Outra pilha Resposta do Exchange

    
por 04.04.2016 / 13:40
3

Ao executar a partir do cron, você pode precisar passar -f para autossh (para baixar para o segundo plano) e usar nohup :

0 0 * * * nohup autossh -f <your params>  >/dev/null 2>&1 &
    
por 04.04.2016 / 12:25