O script de inicialização do Debian não funciona corretamente

1

Eu escrevi o script de início na parte inferior desta pergunta para tentar fazer com que um dos meus dispositivos crie automaticamente várias portas remotas encaminhadas com o meu VPS na inicialização. (Eu tirei as tags LSB para mantê-lo ao ponto, mas elas são válidas.) Eu não recebo nenhum erro ao executar o script. Ele cria os processos autossh, mas não faz nenhuma conexão com o VPS. (O cliente é um Raspberry Pi rodando Debian Wheezy, o VPS é Ubuntu Server 14.10.) O comando ssh usado sozinho faz funcionar corretamente, então eu não sei porque o script de início não funcionaria. Uma coisa que notei (se você olhar abaixo) é que o -f flag está sendo completamente removido do processo quando eu uso o script, mas permanece quando eu apenas chamo ssh . O PuTTY sinaliza o -f em verde, diferentemente do restante do texto, mas meu Google não conseguiu me dizer por que isso acontece ou se está relacionado ao problema. (Nota: Todos os números de porta são alterados, mas ainda se relacionam corretamente.)

Minha chave pública está correta e o host remoto está em known_hosts de user e root . Eu tentei escapar e não escapar dos parâmetros -o , isso não fez diferença, e escapar / usar aspas em volta da flag -f também não fez diferença.

UPDATE : o syslog está mostrando ssh exited with error status 255; restarting ssh para cada linha do autossh, apesar de executar os comandos individuais da mesma forma que o ssh (não o autossh) funciona corretamente. Esse erro é retornado se o script for executado ou se eu executar a linha do script diretamente no bash.

Parte relevante do script init.d :

case "$1" in
  start)
    echo "Creating SSH tunnels"
    autossh -M 0 -f -N -o \"ServerAliveInterval 60\" -o \"ServerAliveCountMax 3\" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip
    #same command repeated twice more, everything exactly the same but with different ports
    ;;
  stop)
    echo "Stopping SSH tunnels..."
    ps axf | grep autossh | grep -v grep | awk '{print "kill -9 " $1}' | sh
    ;;
  *)
    echo "Usage: /etc/init.d/autossh-gen.sh {start|stop}"
    exit 1
    ;;
esac

Isso faz com que três linhas apareçam quando ps aux | grep autossh é executado, mas vou colocar apenas uma aqui para fins de brevidade. Nenhuma conexão real é feita ao servidor remoto; a porta permanece fechada. Observe que o comando -f no script não está presente.

root     14137  0.0  0.1   1700   976 ?        Ss   01:37   0:00 /usr/lib/autossh/autossh -M 0    -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip

Se eu executar apenas este comando ssh ...

ssh -f -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip

... então esta é a saída para ps aux e a porta é encaminhada com sucesso.

root     14124  0.0  0.1   5728  1720 ?        Ss   01:31   0:00 ssh -f -N -o ServerAliveInterval 60 -o ServerAliveCountMax 3 -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip
    
por vaindil 04.03.2015 / 08:15

2 respostas

1

ssh exited with error status 255 geralmente aponta problemas de autenticação ou conectividade. Tente executar sua opção autossh sem -f para ver sua saída:

autossh -M 0 -N -o \"ServerAliveInterval 60\" -o \"ServerAliveCountMax 3\" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip

Fora de autossh manual:

Note that there is a crucial a difference between -f with autossh, and -f with ssh: when used with autossh ssh will be unable to ask for passwords or passphrases.

Você também pode tentar passar as opções -v ou -vv para ssh para ajudar na depuração:

autossh -M 0 -N -vv -o \"ServerAliveInterval 60\" -o \"ServerAliveCountMax 3\" -R 11111:localhost:22222 -i /home/username/.ssh/id_rsa -p 3333 user@server_ip

Além disso, observe que /usr/lib/autossh/autossh é o processo que monitora sua sessão ssh e a reinicia, se necessário. Se o comando autossh estiver funcionando, você poderá ver autossh e ssh process:

$ps -eo user,pid,args | grep ssh
----------
someuser    16384  /usr/lib/autossh/autossh -M 33332    -N -R 11111:127.0.0.1:22222 serverip
someuser    16385  /usr/bin/ssh -L 33332:127.0.0.1:33332 -R 33332:127.0.0.1:33333 -N -R 11111:127.0.0.1:22222 serverip

E btw, você não precisa passar a opção -f para ssh , autossh irá iniciar em segundo plano, por padrão.

    
por 21.03.2015 / 00:37
0

Pode ser que o script de inicialização esteja sendo executado em um contexto de usuário diferente daquele quando você o tenta manualmente. Se o script de inicialização estiver sendo executado com um ID de usuário diferente, verifique se o arquivo de chave privada pode ser lido corretamente.

Existem problemas de configuração conhecidos nos arquivos principais e suas permissões.

O usuário que está executando o comando ssh precisa acessar o arquivo de identidade e, ssh pode ser estrito neste, que o usuário possui o arquivo, o diretório .ssh e que as permissões são 700 para o diretório .ssh e 600 para o arquivo de chave privada.

    
por 20.03.2015 / 14:18