设置基于密钥的身份验证后,SSH仍然要求输入密码


10

我已经为A用户到B计算机的root用户成功创建了基于密钥的身份验证。

现在,我在B机器上创建了一个与A机器相同的新用户,我们称他为USER。我在B机上为他创建了一个主目录/home/USER,我想为他从A机到B机创建基于密钥的身份验证。

所以,我在A机上跑了

  1. ssh-keygen -t rsa,接受所有路径,因此/home/USER/.ssh/id_rsa不带任何短语
  2. ssh-copy-id -i /home/USER/.ssh/id_rsa.pub USER@BmachinesIP,输入密码并得到按摩

现在尝试登录机器bla bla bla

因此,一切似乎都还可以。

但是,当我尝试连接时ssh USER@BmachinesIP,系统要求输入密码。我试图查看日志并运行ssh -vvv USER@BmachinesIP,这是输出的一部分:

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:

那么,谁能告诉我我做错了什么或应该改变什么?也许问题出在权限中,它们是:

在机器上:

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

在B机上:

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

Answers:


13

我找到了解决方案。权限存在问题。

/home/USER 在远程计算机上被授予所有权限,但是对于基于密钥的身份验证,必须将其设置为755


2
哇。令人惊讶的是,即使权限对于正确的公共密钥配置至关重要,调试权限的调试输出也为零。
jchook

哇,你是对的。现在它正在工作...。尽管我真的想保留它最初的许可(775)。关于如何改变这一点的任何线索?
Pablo Olmos de Aguilera C.

似乎没有办法,只有解决方法是在sshd_config中将StrictModes设置为no。:/。
Pablo Olmos de Aguilera C.

2
本质上,您需要以下权限:chmod o-w ~/; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys,然后它才能工作。从马克西姆·R。(Maxime R.)的答案中复制而来:askubuntu.com/questions/54670/passwordless-ssh-not-working
erik

2
我已经完成了所有这些权限更改,但是在我使用ssh时仍要求我输入密码。我还验证了两台计算机(Ubuntu)上的私钥是否相同。很疑惑。
Amalgovinus 2014年

2

我刚安装CentOS7时也遇到同样的问题。

1.检查主目录权限以及〜/ .ssh和〜/ .ssh / authorized_keys权限(按照@erik)

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

2.检查 / etc / ssh / sshd_config设置&&服务sshd重新启动(每次编辑后)有用:在sshd_config中尝试“ LogLevel VERBOSE”。

检查一切正常后,我仍然收到密码提示。

使用-vvv日志运行ssh客户端:

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

服务器(/ var / log / secure)日志:

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

ssh服务器不会向客户端发送更多错误信息,因为这将带来安全风险。

如果我在其他端口“ sshd -p 5555 -d”上运行了sshd。钥匙起作用了。可以无密码登录。WTF?

然后我禁用了selinux(在/ etc / selinux / config中将SELINUX设置为disable)并重新启动。然后无密码登录就可以了。

当前的sshd_config设置:

[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

因此,很高兴知道我们是否可以更改selinux中的某些内容以使无密码的ssh登录正常工作。谁能改善答案?


0

解决方案不是禁用SELinux,而是修复用户目录的SELinux权限。用户目录上下文必须设置为user_home_t

去检查,

$ sudo ls -Z /home/

如果您的用户目录的上下文不是user_home_t,则SELinux不允许通过公钥的SSH进入该用户的用户目录。

修理,

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

基于密钥的登录现在应该可以工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.