Como depurar o sshd não executando na inicialização no servidor

1

Eu tenho um servidor (virtual) executando um sistema mínimo do Ubuntu 10.04. Eu pareço ter configurado incorretamente o sshd para que ele não inicie na reinicialização. Como este é um servidor, agora não tenho mais acesso ao shell do meu servidor. Qualquer solicitação ssh resulta nisso:

ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused

E /var/run/sshd.pid não existe.

Eu tenho acesso ao sistema de arquivos através de um Painel Virtuozzo que o provedor do servidor instalou.

Eu não editei o script /etc/init.d/ssh start, mas copiei para /etc/rc2.d/ssh na esperança de que isso fosse iniciado ssh na reinicialização.

Eu também tentei adicionar uma chamada de inicialização para /etc/crontab :

7 * * * * root /usr/bin/touch /root/cron_is_running

8 * * * * root /etc/init.d/ssh start

Também não obtenho o arquivo /root/cron_is_running nem sshd inicial

Meus arquivos de log não fornecem muitas mensagens de erro para ssh, por exemplo. /var/log/syslog mostra muito named stuff na inicialização e alguns mysql upgrade, isso certamente não está relacionado.

Agradeço qualquer ajuda, já configurei um monte de coisas nesse servidor e instalando uma nova imagem eu perderia todos os dados no servidor.

Atualizar : a alteração do script em /etc/rc2.d/ssh to /etc/rc2.d/S90ssh não teve nenhum efeito. /var/log/auth.log não contém nenhuma linha que sugira que o ssh tente inicializar, mas está cheio destas linhas:

Atualização 2: Como sugerido, também tentei adicionar /usr/sbin/sshd a /etc/rc.local . Mas um teste com touch /tmp/test parece sugerir que este arquivo não é executado apesar da marcação + x ser definida. Eu também tentei adicionar sleep 10 no início do script rc.local porque foi sugerido em outro lugar que esse script tinha problemas de simultaneidade.

Atualização final Graças ao abaixo responde novamente. Eles ajudaram muito a consertar a inicialização do sshd ausente nos diretórios rcX.d/ . A correção final era iniciar um "Repair" do Virtuozzo Panel, isso monta o sistema original como parte do sistema de arquivos de um sistema de recuperação com as configurações de rede originais. Eu poderia logar isso com o ssh. Eu copiei as configurações ssh de trabalho do sistema de recuperação sobre as configurações ssh do sistema original quebrado, terminei a recuperação e agora posso efetuar login novamente.

    
por Yashima 05.12.2011 / 13:09

2 respostas

2

Sua tentativa de copiar para /etc/rc2.d/ssh estava quase certa.

Para que um script em /etc/rcX.d seja executado na inicialização, ele deve ser chamado de SxxZZZ , em que S é um literal S (para Start ; você também pode usar K para Kill em tempo de desligamento), xx é um número representando onde na ordem de inicialização é executado (01 primeiro, 99 último) e ZZZ é o nome do seu script.

Então, você gostaria de algo como S90ssh . O número não é criticamente importante, 90 deve estar ok, a rede estará pronta até então etc.

Note que ele também terá que ser definido como executável - não sei se o sistema que você está usando permitirá que você faça isso? Esperançosamente, copiar o script ssh existente e simplesmente renomear manterá os bits executáveis definidos.

Como alternativa, /etc/rc.local pode ser usado como um script de inicialização genérico para todos os propósitos. Basta soltar /usr/sbin/sshd antes da linha de saída para obter sshd como último recurso.

Dê uma chance e atualize sua pergunta se ainda tiver problemas:)

Você pode fazer check-in /var/log/auth.log ( /var/log/syslog não contém mensagens sshd por padrão) para uma linha como:

sshd[18838]: Server listening on 0.0.0.0 port 22.

para ver se está começando.

    
por Caesium 05.12.2011 / 13:31
1

Se você for para /etc/init.d/ type sudo service ssh start e ele ficar limpo (sem falhas), você só precisará executar sudo update-rc.d ssh defaults para fazer o serviço subir nos níveis corretos e ser eliminado quando o sistema for desligado .

Você também pode fazer isso copiando manualmente o script e renomeá-lo para indicar que ele deve ser interrompido ou iniciado nesse nível. Aqui estão os arquivos que são criados com o comando update-rc.d :

   /etc/rc0.d/K20ssh -> ../init.d/ssh
   /etc/rc1.d/K20ssh -> ../init.d/ssh
   /etc/rc6.d/K20ssh -> ../init.d/ssh
   /etc/rc2.d/S20ssh -> ../init.d/ssh
   /etc/rc3.d/S20ssh -> ../init.d/ssh
   /etc/rc4.d/S20ssh -> ../init.d/ssh
   /etc/rc5.d/S20ssh -> ../init.d/ssh

Portanto, um simples cp /etc/init.d/ssh /etc/rc0(1,6).d/K20ssh e cp /etc/init.d/ssh /etc/rc2(3,4,5).d/K20ssh deve fazer o truque. (note que você tem que executar cp para cada pasta rc.d , o comando é apenas um exemplo do nome a ser dado aos arquivos copiados).

K20ssh é executado quando a máquina está sendo desligada e S20ssh é o nome do script para os níveis em que ela deve ser executada.

S e K indicam iniciar ou kill e o número após indicar a ordem em que os scripts dentro da pasta serão executados, um número menor executar mais cedo e um maior número faz com que seja executado mais tarde, no caso de ssh , ele realmente não deve mather, mas 20 é o padrão atribuído por update-rc.d .

    
por Bruno Pereira 05.12.2011 / 13:21