为什么使用公钥身份验证时,我仍然收到 ssh 密码提示?

为什么使用公钥身份验证时,我仍然收到 ssh 密码提示?

我正在从我在这里找到的 URL 进行工作:

http://web.archive.org/web/20160404025901/http://jaybyjayfresh.com/2009/02/04/logging-in-without-a-password-certificates-ssh/

我的ssh客户端是Ubuntu 64位11.10桌面,我的服务器是Centos 6.2 64位。我已按照指示进行操作。我在 ssh 上仍然收到密码提示。

我不知道下一步该做什么。

答案1

确保目录及其内容的权限~/.ssh正确。当我第一次设置 ssh 密钥身份验证时,我没有~/.ssh正确设置该文件夹,它对我大喊大叫。

  • 您的主目录~、您的~/.ssh目录和~/.ssh/authorized_keys远程计算机上的文件必须只能由您写入:rwx------并且rwxr-xr-x可以,但rwxrwx---不好,即使您是组中唯一的用户(如果您更喜欢数字模式:700755,不是775) 。
    如果~/.sshauthorized_keys是符号链接,检查规范路径(扩展符号链接)
  • 您的~/.ssh/authorized_keys文件(在远程计算机上)必须可读(至少 400),但如果您要向其中添加更多密钥,则需要它也可写(600)。
  • 您的私钥文件(在本地计算机上)必须只能由您读取和写入:rw-------,即600
  • 另外,如果 SELinux 设置为强制执行,您可能需要运行restorecon -R -v ~/.ssh(参见例如Ubuntu 错误 965663Debian 错误报告 #658675;这是CentOS 6 中已修补)。

¹某些发行版(Debian 及其衍生版本)除外,这些发行版已修补代码以允许组可写(如果您是组中的唯一用户)。

答案2

如果您拥有服务器的 root 访问权限,解决此类问题的简单方法是在调试模式下运行 sshd,方法是/usr/sbin/sshd -d -p 2222在服务器上发出类似的命令(需要 sshd 可执行文件的完整路径,which sshd可以提供帮助),然后从客户端使用ssh -p 2222 user@host.这将强制 SSH 守护进程停留在前台并显示有关每个连接的调试信息。寻找类似的东西

debug1: trying public key file /path/to/home/.ssh/authorized_keys
...
Authentication refused: bad ownership or modes for directory /path/to/home/

如果无法使用替代端口,您可以暂时停止 SSH 守护程序并用调试模式下的端口替换。停止 SSH 守护进程不会终止现有连接,因此可以通过远程终端执行此操作,但有些风险 - 如果在调试替换未运行时连接确实以某种方式断开,您将被锁定在计算机之外直到可以重新启动它。所需命令:

service ssh stop
/usr/sbin/sshd -d
#...debug output...
service ssh start

(根据您的 Linux 发行版,第一行/最后一行可能是systemctl stop sshd.service/ systemctl start sshd.service。)

答案3

你的主目录加密了吗?如果是这样,对于您的第一次 ssh 会话,您将必须提供密码。与同一服务器的第二个 ssh 会话正在使用身份验证密钥。如果是这种情况,您可以将文件移动authorized_keys到未加密的目录并更改~/.ssh/config.

我最终做的是创建一个/etc/ssh/username由用户名拥有、具有正确权限的文件夹,并将authorized_keys文件放在其中。然后将 AuthorizedKeysFile 指令更改为/etc/ssh/config

AuthorizedKeysFile    /etc/ssh/%u/authorized_keys

这允许多个用户拥有此 ssh 访问权限,而不会影响权限。

答案4

将密钥复制到远程计算机并将其放入后,authorized_keys您必须执行以下操作:

ssh-agent bash
ssh-add ~/.ssh/id_dsa or id_rsa

相关内容