O Recent Upstart tem esses novos recursos sofisticados do tipo systemd para iniciar trabalhos na conexão de entrada via socket-bridge. Gostaria de iniciar meu sshd na primeira conexão com a porta 22.
Agora tenho:
start on socket PROTO=inet PORT=22
no meu ssh.conf e tenho trabalhos upstart-socket-bridge e upstart-udev-bridge em execução.
O trabalho ssh começa bem quando eu me conecto à minha caixa na porta 22, mas o sshd não responde comigo. É como se não o recebesse e não pudesse aceitá-lo. Tentar conectar novamente não ajudará, até mesmo o sshd está em execução e deve aceitar as conexões normalmente. Upstart ainda está mexendo com isso!
Páginas de manual de eventos de soquetedizer:
Quando uma conexão de entrada é detectada, o descritor de arquivo que representa o soquete é passado para o trabalho em questão para permitir que ele aceite(2) a conexão. Além disso, a variável de ambiente UPSTART_JOB conterá o nome do evento ("socket") e a variável de ambiente UPSTART_FDS conterá o número do descritor de arquivo correspondente ao soquete de escuta.
Isso significa que para tirar vantagem disso, o ssh precisa de suporte específico para passar o soquete FD? SE for esse o caso, isso estraga toda a diversão :/
Responder1
Usar a ponte de soquete requer um daemon corrigido que possa lidar com o soquete fornecido.
De man socket-event
:
Quando uma conexão de entrada é detectada, o descritor de arquivo que representa o soquete é passado para o trabalho em questão para permitir que ele aceite(2) a conexão. Além disso, a variável de ambiente UPSTART_JOB conterá o nome do evento ("socket") e a variável de ambiente UPSTART_FDS conterá o número do descritor de arquivo correspondente ao soquete de escuta.
Embora normalmente o sshd simplesmente crie um soquete e execute listen() e depois accept() nele, o sshd só precisa ler a variável de ambiente UPSTART_FDS e aceitar() nela.
Responder2
Eu recomendo fortemente executar o sshd como um serviço normal em vez de iniciá-lo sob demanda. O sshd é perfeitamente capaz de gerenciar conexões por conta própria em todos os casos, exceto nos mais extremos.
Se for absolutamente necessário iniciar o sshd sob demanda, os seguintes comandos serão úteis para solução de problemas:
ps auxw | grep ssh
, grep para ssh na lista de processos em execução.netstat -tlp
, fornece uma lista das portas TCP nas quais um serviço está escutando no momento. O SSH deve estar listado aqui; caso contrário, o sshd não está configurado corretamente.ssh -vvv
(executado a partir do cliente), saída de depuração detalhada da sua sessão ssh, ajuda a identificar o ponto de falha.nmap <hostname>
(executar a partir de um cliente - requer instalação do pacote nmap), liste as portas abertas no host. Se o SSH não estiver listado aqui, mas estiver listado nanetstat
saída, você provavelmente tem um problema de firewall.