Não tenho idéia de como isso acontece. A distribuição é 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 essa parte do log, alterei 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 já viu algo como isso?
Notas:
As permissões de arquivo foram verificadas duas vezes:
# 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
Me perguntaram se o sshd pode acessar os arquivos root no "modo daemon". A resposta mais próxima que chego a 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 sendo executado como root, não sei como não é possível acessar seus próprios arquivos. O SELinux poderia ser a causa?
Respostas:
Sim, provavelmente o SELinux é a causa. O
.ssh
diretório provavelmente está errado. Olhe para/var/log/audit/audit.log
. Deve ser rotuladossh_home_t
. Verifique comls -laZ
. Executerestorecon -r -vv /root/.ssh
se necessário.fonte
restorecon -r /
, YMMV.type=AVC msg=audit(1434642809.455:94717): avc: denied { search } for pid=27032 comm="sshd" name="/" dev=dm-2 ino=2 scontext=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:file_t:s0 tclass=dir
- não tenho certeza do que isso significaname="/"
- eu tive que executar orestorecon -r /
que o @Irfy sugeriu.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 foi montado de outro lugar (NFS). Encontrei este relatório de erro que me deu pistas.
Irã:
para confirmar use_nfs_home_dirs estava desativado e, em seguida:
para ligar.
Agora eu posso ssh na minha máquina usando minha chave e sem digitar uma senha. Alternar o booleano use_home_nfs_dirs foi o que foi necessário para mim.
fonte
Para adicionar à resposta de Mark Wagner, se você estiver usando um caminho de diretório inicial personalizado (ou seja, não
/home
), verifique se configurou o contexto de segurança do SELinux. Para fazer isso, se você tiver diretórios pessoais do usuário, por exemplo/myhome
, execute:fonte
semanage
:sudo yum install policycoreutils-python
Parece que você usa chaves diferentes ao testar as conexões, 0x7f266e1a8840 vs 0x7f85527ef230. Tente conectar usando 'ssh -v example.com' ao sshd em execução como um daemon e no modo de depuração e procure as chaves usadas pelo ssh na cadeia "Oferecendo chave pública RSA".
fonte
debug3: mm_answer_keyallowed: key 0xFFFFFFFFFF
mudará toda vez que o sshd receber uma nova conexão. Para confirmar isso, encontre um servidor no qual o SSH funcione, ligue o sshd LOGLEVEL para debug3, reinicie o sshd, executetail -f /var/log/secure |grep mm_answer_keyallowed
e efetue login algumas vezes, aguardando alguns segundos (ou minutos) entre cada conexão. Você verá que o valor muda a cada vez. E, na verdade, parece um contador para mim.