Estou usando o Debian 11 em um Raspberry Pi 4 (imagem encontrada aqui ). sshd está configurado corretamente (eu apenas editei /etc/ssh/sshd_config, o resto é completamente novo da instalação do sistema) e funciona corretamente quando eu o inicio manualmente. No entanto, ele não inicia automaticamente pelo systemd na inicialização. sudo systemctl status sshd retorna isso:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:sshd(8)
man:sshd_config(5)
Não há nada relacionado ao ssh na saída do journalctl.
Este é o conteúdo de /lib/systemd/system/ssh.service :
[Unit]
Description=OpenBSD Secure Shell server
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
Alias=sshd.service
O arquivo sshd_not_to_be_run não existe. network.target está ativo. Também instalei o auditd apenas para solucionar problemas e ele é iniciado automaticamente com êxito, mas o ssh.service ainda está morto após a reinicialização.
fico sem ideias…
ATUALIZAR:
Acabei de descobrir que um processo sshd é gerado em todas as demandas de conexão. Ele é gerenciado pelo próprio systemd e é claramente impresso no diário quando alguns computadores estrangeiros tentam se conectar ao meu:
oct. 30 13:09:30 RaspServeur systemd[1]: Started OpenBSD Secure Shell server per-connection daemon (117.68.2.55:45784).
░░ Subject: L'unité (unit) [email protected]:22-117.68.2.55:45784.service a terminé son démarrage
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░
░░ L'unité (unit) [email protected]:22-117.68.2.55:45784.service a terminé son démarrage, avec le résultat done.
oct. 30 13:09:30 RaspServeur audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 subj==unconfined msg='[email protected]:22-117.68.2.55:45784 comm="systemd" exe="/usr/lib/systemd/systemd" ho>
oct. 30 13:09:33 RaspServeur sshd[1861]: error: kex_exchange_identification: Connection closed by remote host
oct. 30 13:09:33 RaspServeur sshd[1861]: Connection closed by 117.68.2.55 port 45784
oct. 30 13:09:33 RaspServeur systemd[1]: [email protected]:22-117.68.2.55:45784.service: Succeeded.
░░ Subject: Unit succeeded
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░
░░ The unit [email protected]:22-117.68.2.55:45784.service has successfully entered the 'dead' state.
oct. 30 13:09:33 RaspServeur audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 subj==unconfined msg='[email protected]:22-117.68.2.55:45784 comm="systemd" exe="/usr/lib/systemd/systemd" hos>
É como se existisse uma instalação paralela do sshd com uma configuração padrão. Minha própria configuração com configurações como um número de porta específico para usar não pode funcionar sem iniciar manualmente o sshd.service. Mas eu posso me conectar com sucesso a esse shadow sshd com a porta padrão, e systemctl status sshd ainda relata um serviço morto…
A situação fica assustadora, agora estou a dois dedos de distância para apagar o cartão SD e instalar uma imagem de outra distribuição com menos pré-configuração.
Este poderia ser o mesmo problema que o autor da pergunta nº 442181 teve? Ou seja, o sshd falha ao iniciar na inicialização porque a interface/endereço que ele deseja vincular ainda não está pronto. Você mencionou que especificou uma porta não padrão para o soquete do servidor, você também especificou uma determinada interface de rede e/ou endereço IP?
Não sei por que o systemd inicia um daemon por conexão que usa a configuração padrão. Pode ser parte da configuração padrão do sistema, como você sugere. Na questão #507705 eles falam sobre systemd "ativação de soquete", que aparentemente é o recurso que fornece geração de serviço por conexão. Procure um arquivo de unidade systemd chamado
ssh.socket
. Você pode usarman systemd.socket
para obter informações sobre como o recurso funciona.Editar: Você deve poder usar
systemctl status ssh.socket
para verificar se o soquete do servidor SSH do systemd está ativado.Se você iniciar o sshd manualmente, o systemd não o registrará como iniciado, então faz sentido que o systemctl não mostre nada. Cada sshd é realmente um processo de escuta e depois que uma conexão é feita, um processo separado lidando com essa conexão é bifurcado. Se você
ps
, haverá vários processos sshd refletindo isso. Se você matar o sshd-listener, os outros processos sshd que estão lidando com conexões ainda estarão ativos.Se você iniciar o sshd e fizer um systemctl, inicie o sshd. Isso é o equivalente a iniciar 2 sshds, que podem bloquear se todos tentarem usar a mesma porta.
espero que ajude