autenticação de chave pública falha SOMENTE quando o sshd é daemon

32

Eu não tenho ideia de como isso acontece. A distro é o Scientific Linux 6.1 e tudo está configurado para executar a autenticação via chave pública. No entanto, quando o sshd está sendo executado como um daemon (service sshd start), ele não aceita chaves públicas. (Para obter este pedaço de log, eu mudei o script sshd para adicionar a opção -ddd)

debug1: trying public key file /root/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: trying public key file /root/.ssh/authorized_keys2
debug1: restore_uid: 0/0
Failed publickey for root from xxx.xxx.xxx.xxx port xxxxx ssh2
debug3: mm_answer_keyallowed: key 0x7f266e1a8840 is not allowed
debug3: mm_request_send entering: type 22
debug3: mm_request_receive entering
debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa
debug3: Wrote 64 bytes for a total of 1853
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 1

Se o sshd for executado no modo de depuração /usr/sbin/sshd -ddd , a autenticação funcionará como um encanto:

debug1: trying public key file /root/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
debug1: matching key found: file /root/.ssh/authorized_keys, line 1
Found matching RSA key: d7:3a:08:39:f7:28:dc:ea:f3:71:7c:23:92:02:02:d8
debug1: restore_uid: 0/0
debug3: mm_answer_keyallowed: key 0x7f85527ef230 is allowed
debug3: mm_request_send entering: type 22
debug3: mm_request_receive entering
debug3: Wrote 320 bytes for a total of 2109
debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa
Postponed publickey for root from xxx.xxx.xxx.xxx port xxxxx ssh2
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 0

Alguma ideia? Alguém viu algo assim?

Notas:

As permissões de arquivo foram verificadas novamente:

# ll -d .ssh
drwx------. 2 root root 4096 Oct 14 10:05 .ssh
# ll .ssh
total 16
-rw-------. 1 root root  786 Oct 14 09:35 authorized_keys
-rw-------. 1 root root 1675 Oct 13 08:24 id_rsa
-rw-r--r--. 1 root root  393 Oct 13 08:24 id_rsa.pub
-rw-r--r--. 1 root root  448 Oct 13 12:51 known_hosts

Foi perguntado se o sshd pode acessar os arquivos do root no "modo daemon". A resposta mais próxima que eu tenho para essa pergunta é:

# netstat -ntap | grep 22
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      19847/sshd 
# ps -ef | grep 19847
root     19847     1  0 09:58 ?        00:00:00 /usr/sbin/sshd

Se o sshd estiver rodando como root, não sei como não é possível acessar seus próprios arquivos. O SELinux poderia ser a causa?

    
por user666412 14.10.2011 / 18:25

4 respostas

41

Sim, o SELinux é provavelmente a causa. O .ssh dir provavelmente está rotulado incorretamente. Veja /var/log/audit/audit.log . Deve ser rotulado ssh_home_t . Verifique com ls -laZ . Execute restorecon -r -vv /root/.ssh , se necessário.

    
por 14.10.2011 / 20:21
3

Eu tive o mesmo problema. No meu caso, restorecon e chcon não funcionaram.

Eu não queria desativar o selinux. Depois de muita pesquisa, finalmente percebi que era porque meu diretório pessoal era montado em outro lugar (NFS). Eu encontrei este relatório de bug que me indicou.

eu corri:

> getsebool use_nfs_home_dirs
use_nfs_home_dirs --> off

para confirmar que use_nfs_home_dirs estava desativado e, em seguida:

sudo setsebool -P use_nfs_home_dirs 1

para ligá-lo.

Agora eu posso ssh para minha máquina usando minha chave e sem digitar uma senha. O uso do booleano use_home_nfs_dirs foi o que foi necessário para mim.

    
por 26.01.2018 / 17:15
1

Para adicionar a resposta de Mark Wagner, se você estiver usando um caminho de diretório pessoal personalizado (ou seja, não /home ), é necessário verificar se definiu o contexto de segurança do SELinux. Para fazer isso, se você tiver diretórios iniciais de usuário em, por exemplo, /myhome , execute:

semanage fcontext -a -e /home /myhome
restorecon -vR /myhome
    
por 18.04.2018 / 20:01
0

Parece que você usa chaves diferentes ao testar as conexões, 0x7f266e1a8840 vs 0x7f85527ef230. Tente conectar usando 'ssh -v example.com' ao sshd rodando como um daemon e no modo de depuração e procure pelas chaves usadas pelo ssh em volta da string "Oferecendo chave pública RSA".

    
por 14.10.2011 / 20:30