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 meu VPS na inicialização. (Eu removi as tags LSB para mantê-las objetivas, mas elas são válidas.) Não recebo nenhum erro ao executar o script. Ele cria os processos de autossh, mas não faz nenhuma conexão com o VPS. (O cliente é um Pi Raspberry rodando Debian Wheezy, VPS é Servidor Ubuntu 14.10.) O ssh
comando usado sozinho não funcionar corretamente, então eu não sei por que o script de início não iria funcionar. Uma coisa que notei (se você olhar abaixo) é que o -f
sinalizador está sendo completamente removido do processo quando eu uso o script, mas permanece quando eu apenas ligo ssh
. PuTTY sinaliza o-f
em verde, diferente 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
ambos user
e root
. Tentei escapar e não escapar dos -o
parâmetros, que não fizeram diferença, e escapar / usar aspas ao redor da -f
bandeira também não fez diferença.
UPDATE : o syslog está sendo exibido ssh exited with error status 255; restarting ssh
para cada linha de autossh, embora a execução de comandos individuais da mesma forma que ssh (não autossh) funcione corretamente. Esse erro é retornado se o script é executado ou se eu corro a linha diretamente do script no bash.
Parte relevante do init.d
script:
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
executadas, mas colocarei apenas uma aqui por questões de brevidade. Nenhuma conexão real é feita com o servidor remoto; a porta permanece fechada. Observe que o -f
comando 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 isso é enviado 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
autossh
comando, não o ssh
comando. (Pergunta honesta, não estou dizendo que você está errado.)
/usr/lib/autossh/autossh
, não /usr/bin/autossh
. Não passa a -f
opção para esse processo auxiliar. Você verificou mensagens do syslog autossh
?
ssh exited with error status 255; restarting ssh
para cada autossh
linha, mesmo que a execução de comandos individuais ssh
funcione corretamente. Esse erro é retornado se o script é executado ou se eu corro a linha diretamente do script no bash.