![为什么使用公钥身份验证时,我仍然收到 ssh 密码提示?](https://linux22.com/image/22569/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8%E5%85%AC%E9%92%A5%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E6%97%B6%EF%BC%8C%E6%88%91%E4%BB%8D%E7%84%B6%E6%94%B6%E5%88%B0%20ssh%20%E5%AF%86%E7%A0%81%E6%8F%90%E7%A4%BA%EF%BC%9F.png)
我正在从我在这里找到的 URL 进行工作:
我的ssh客户端是Ubuntu 64位11.10桌面,我的服务器是Centos 6.2 64位。我已按照指示进行操作。我在 ssh 上仍然收到密码提示。
我不知道下一步该做什么。
答案1
确保目录及其内容的权限~/.ssh
正确。当我第一次设置 ssh 密钥身份验证时,我没有~/.ssh
正确设置该文件夹,它对我大喊大叫。
- 您的主目录
~
、您的~/.ssh
目录和~/.ssh/authorized_keys
远程计算机上的文件必须只能由您写入:rwx------
并且rwxr-xr-x
可以,但rwxrwx---
不好,即使您是组中唯一的用户(如果您更喜欢数字模式:700
或755
,不是775
) 。
如果~/.ssh
或authorized_keys
是符号链接,检查规范路径(扩展符号链接)。 - 您的
~/.ssh/authorized_keys
文件(在远程计算机上)必须可读(至少 400),但如果您要向其中添加更多密钥,则需要它也可写(600)。 - 您的私钥文件(在本地计算机上)必须只能由您读取和写入:
rw-------
,即600
。 - 另外,如果 SELinux 设置为强制执行,您可能需要运行
restorecon -R -v ~/.ssh
(参见例如Ubuntu 错误 965663和Debian 错误报告 #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