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
fonte
autossh
comando, não ossh
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 syslogautossh
?ssh exited with error status 255; restarting ssh
para cadaautossh
linha, mesmo que a execução de comandos individuaisssh
funcione corretamente. Esse erro é retornado se o script é executado ou se eu corro a linha diretamente do script no bash.Respostas:
ssh exited with error status 255
geralmente aponta problemas de autenticação ou conectividade. Tente executar sua opçãoautossh
sem-f
para que você possa ver sua saída:Fora do
autossh
manual:Você também pode tentar passar
-v
ou-vv
opçõesssh
para ajudar na depuração:Além disso, observe que esse
/usr/lib/autossh/autossh
é o processo que monitora suassh
sessão e a reinicia, se necessário. Se seuautossh
comando estiver funcionando, você poderá ver os doisautossh
essh
processar:Por outro lado, você não precisa passar a
-f
opção parassh
,autossh
irá iniciá-la em segundo plano, por padrão.fonte
Pode ser que o script init esteja sendo executado em um contexto de usuário diferente do que quando você o tenta manualmente. Se o script init estiver sendo executado com um ID do usuário diferente, verifique se o arquivo da 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 rigoroso, pois o usuário é o proprietário do arquivo, o diretório .ssh e as permissões são 700 para o diretório .ssh e 600 para o privado arquivo de chave.
fonte