O script de inicialização do Debian autossh não está funcionando corretamente


2

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 sshcomando 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 -fsinalizador está sendo completamente removido do processo quando eu uso o script, mas permanece quando eu apenas ligo ssh. PuTTY sinaliza o-fem 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_hostsambos usere root. Tentei escapar e não escapar dos -oparâmetros, que não fizeram diferença, e escapar / usar aspas ao redor da -fbandeira também não fez diferença.

UPDATE : o syslog está sendo exibido ssh exited with error status 255; restarting sshpara 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.dscript:

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 autosshexecutadas, 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 -fcomando 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 auxe 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

Observe que a página de manual declara que o sinalizador -f é removido dos argumentos passados ​​para o ssh.
wurtel

@ wurtel eu vi isso, mas ele ainda deve aparecer na lista de processos, não deveria? A lista de processos mostra o autosshcomando, não o sshcomando. (Pergunta honesta, não estou dizendo que você está errado.)
vaindil

Está mostrando /usr/lib/autossh/autossh, não /usr/bin/autossh. Não passa a -fopção para esse processo auxiliar. Você verificou mensagens do syslog autossh?
wurtel

@wurtel syslog está sendo exibido ssh exited with error status 255; restarting sshpara cada autosshlinha, mesmo que a execução de comandos individuais sshfuncione corretamente. Esse erro é retornado se o script é executado ou se eu corro a linha diretamente do script no bash.
vaindil

Respostas:


1

ssh exited with error status 255geralmente aponta problemas de autenticação ou conectividade. Tente executar sua opção autosshsem -fpara que você possa 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 do autosshmanual:

Observe que há uma diferença crucial entre o -fautossh e o -fssh: quando usado com o autossh ssh, não será possível solicitar senhas ou senhas .

Você também pode tentar passar -vou -vvopções sshpara 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 esse /usr/lib/autossh/autosshé o processo que monitora sua sshsessão e a reinicia, se necessário. Se seu autosshcomando estiver funcionando, você poderá ver os dois autosshe sshprocessar:

$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

Por outro lado, você não precisa passar a -fopção para ssh, autosshirá iniciá-la em segundo plano, por padrão.


0

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.


Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem - você sempre pode comentar em suas próprias postagens e, quando tiver reputação suficiente , poderá comentar em qualquer post .
HalosGhost

Alterei seu "comentário" para uma resposta em potencial, afirmando suas perguntas como premissas. Especifique a resposta, fornecendo a descrição dos problemas de configuração conhecidos, possíveis com suporte em alguns links externos.
Anthon

@HalosGhost, minha reputação não me permite comentar as respostas de outras pessoas, daí a nova resposta.
Lambert

@ Lambert Não demora muito para criar o representante necessário. No futuro, restrinja-se a essas postagens até ter o representante. Essa é a questão.
HalosGhost

@HalosGhost, entendi seu ponto de vista, mas (apenas curioso) por que você acha que minha resposta não é a correta? Tentei ajudar o autor com outra possibilidade, já que problemas em chaves públicas / privadas são comuns.
Lambert
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.