O SSH ainda solicita a senha depois de configurar a autenticação baseada em chave


10

Eu criei com sucesso uma autenticação baseada em chave para o usuário root da minha máquina A para minha máquina B.

Agora, criei um novo usuário na máquina B, o mesmo que na máquina A, vamos chamá-lo USER. Criei um diretório inicial para ele na máquina B /home/USERe quero criar uma autenticação baseada em chave para ele da máquina A para a máquina B.

Então, eu corri em uma máquina

  1. ssh-keygen -t rsa, aceitou todos os caminhos, portanto /home/USER/.ssh/id_rsae sem frases
  2. ssh-copy-id -i /home/USER/.ssh/id_rsa.pub USER@BmachinesIP, digitou a senha e recebeu massagem

Agora tente fazer login na máquina bla bla bla

Então, tudo parece estar bem.

Mas quando tentei me conectar ssh USER@BmachinesIP, pediram uma senha. Eu tentei ver o log e corri ssh -vvv USER@BmachinesIPe aqui está uma parte da saída:

debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: /home/USER/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/USER/.ssh/id_dsa
debug3: no such identity: /home/USER/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
USER@BmachinesIP's password:

Então, alguém pode me dizer o que fiz de errado ou o que devo mudar? Talvez o problema esteja nas permissões, aqui estão elas:

em uma máquina:

drwx------  2 USER USER    SIZE DATE TIME .ssh
-rw-------  1 USER USER 1675 2011-10-31 14:36 id_rsa
-rw-r--r--  1 USER USER 413 2011-10-31 14:36 id_rsa.pub

e na máquina B:

drwx------  2 USER defaultGroup    SIZE DATE TIME .ssh
-rw-------    1 USER defaultGroup    SIZE DATE TIME authorized_keys

Respostas:


13

Eu encontrei uma solução. Houve um problema nas permissões.

/home/USER na máquina remota foram concedidas todas as permissões, mas para autenticação baseada em chave, deve ser definido como 755


2
Uau. Surpreendente que não haja saída de depuração zero sobre permissões, mesmo que sejam centrais para a configuração adequada da chave pública.
jchook

Uau, você está certo. Agora está funcionando ... embora eu realmente queira manter a permissão que tinha originalmente (775). Alguma pista sobre como mudar isso?
Pablo Olmos de Aguilera C.

Parece que não há como, apenas a solução alternativa seria definir o StrictModes no no sshd_config. : /.
Pablo Olmos de Aguilera C.

2
Essencialmente, você precisa destas permissões:, chmod o-w ~/; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keysentão ele funciona. Copiado da resposta de Maxime R. partir daqui: askubuntu.com/questions/54670/passwordless-ssh-not-working
erik

2
Fiz todas essas alterações de permissão e ainda me pede uma senha quando ssh. Também verifiquei que a chave privada é a mesma nas duas máquinas (Ubuntu). Muito intrigado.
Amalgovinus

2

Mesmo problema para mim nova instalação do CentOS7.

1. verifique as permissões de diretório inicial e as permissões ~ / .ssh e ~ / .ssh / allowed_keys (conforme @erik)

chmod o-w ~/; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys

2. verifique / etc / ssh / sshd_config settings && service sshd restart (após cada edição) Útil: tente "LogLevel VERBOSE" em sshd_config.

Ainda recebi o aviso de senha depois de verificar tudo o que estava ok.

Execute o cliente ssh com logs -vvv:

debug3: send_pubkey_test 
debug2: we sent a publickey packet, wait for reply

Logs do servidor (/ var / log / secure):

Failed publickey for * from * port * ssh2: RSA *

O servidor ssh não envia mais informações de erro ao cliente, pois isso seria um risco à segurança.

Se eu executasse o sshd na porta diferente 'sshd -p 5555 -d'. A chave funcionou. Login sem senha ok. WTF?

Então desabilitei o selinux (configure SELINUX = desabilitado em / etc / selinux / config) e reiniciei. O login sem senha funcionou bem.

minhas configurações atuais de sshd_config em funcionamento:

[root@hp-bl-05 ~]# grep -vE "^#|^$" /etc/ssh/sshd_config  
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
SyslogFacility AUTHPRIV
LogLevel VERBOSE
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys
HostbasedAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem   sftp    /usr/libexec/openssh/sftp-server

Portanto, seria bom saber que podemos mudar algo pequeno no selinux para que o login ssh sem senha funcione. Alguém pode melhorar a resposta?


0

A solução não está desativando o SELinux, mas para corrigir as permissões do diretório do usuário. O contexto do diretório do usuário deve estar definido como user_home_t.

Checar,

$ sudo ls -Z /home/

Se o contexto para o diretório do usuário for qualquer coisa user_home_t, o SELinux não permitiria o SSH via chave pública nesse diretório do usuário.

Consertar,

$ sudo semanage fcontext -a -t user_home_t /home/azureuser
$ sudo restorecon -vvRF /home/azureuser

O login baseado em chave agora deve funcionar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.