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

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

我已成功为从我的 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:

那么,有人能告诉我我做错了什么或者我应该改变什么吗?也许问题出在权限上,它们如下:

在 A 机器上:

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

答案1

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

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

答案2

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

1.检查主目录权限和 ~/.ssh 和 ~/.ssh/authorized_keys 权限(根据@erik)

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

2. 检查/etc/ssh/sshd_配置设置 && 服务 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 'sshd -p 5555 -d'。密钥有效。无密码登录成功。WTF?

然后我禁用了 selinux(在 /etc/selinux/config 中设置 SELINUX=disabled)并重新启动。无密码登录就可以正常工作了。

我的当前工作的 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 登录正常工作,那就太好了。有人可以改进答案吗?

答案3

解决方案不是禁用 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

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

相关内容