![使用公钥进行 SSH 登录失败](https://linux22.com/image/582272/%E4%BD%BF%E7%94%A8%E5%85%AC%E9%92%A5%E8%BF%9B%E8%A1%8C%20SSH%20%E7%99%BB%E5%BD%95%E5%A4%B1%E8%B4%A5.png)
root
在本地主机上运行 sshd 服务。使用ssh-keygen创建了两对 rsa 密钥user1
。从 root/.ssh/id_rsa.pub 复制到 user1/.ssh/id_rsa.pub。将权限更改为 600。尝试过ssh -l user1 localhost
但ssh -l root localhost
都失败了权限被拒绝(公钥,键盘交互)。。我是否必须将公钥复制到~/.ssh
两个用户的文件夹中?配置有什么问题?为什么我无法连接到本地主机?
文件/etc/ssh/sshd_config
:
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication yes
UsePAM no
AllowUsers user1 root
PermitRootLogin yes
文件中/etc/ssh/ssh_config
未注释的行:
RSAAuthentication yes
PasswordAuthentication no
ForwardX11 no
SendEnv LANG LC_*
HashKnownHosts yes
GSSAPIAuthentication yes
GSSAPIDelegateCredentials no
PubkeyAuthentication yes
编辑1
我正在尝试连接到本地主机。我必须能够仅使用公钥登录到用户 1,同时尽可能使用公钥和/或密码以 root 身份登录。
编辑2
我复制了cp ~/.ssh/id_rsa.pub /home/user1/.ssh/authorized_keys
。更改了权限chmod -R 700 ~/.ssh
并chmod -R 700 /home/user1/.ssh
。重新启动了 sshd“service ssh restart”。但似乎不起作用。
编辑4
root@ubuntu:~# ssh-copy-id user1@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is 34:29:b6:1b:fe:84:eb:82:85:77:87:f6:25:39:61:5a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Permission denied (publickey,keyboard-interactive).
root@ubuntu:~# ssh-copy-id root@localhost
Permission denied (publickey,keyboard-interactive).
日志:
# tail /var/log/auth.log
... ubuntu sshd[8476]: User root not allowed because account is locked
一篇很好的 SSH 故障排除文章:问题与解决方案
答案1
当我尝试登录没有密码的帐户时,我遇到了这个问题,即使我使用 SSH 密钥对身份验证并关闭了密码登录。解决方案是使用我的 root 帐户设置密码:
passwd user1
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
答案2
每当遇到 ssh 连接到服务器的问题时,最好添加标志
-v
,例如$ ssh -v host -l user
在上述两种情况下,公钥 (
id_rsa.pub
) 都应添加到“远程用户的 .ssh/authorized_keys”文件中。在上述情况下,应同时添加到 root 和 user1 中。这可以通过以下方式轻松完成ssh-复制-id命令。/var/log/secure
将提供有关登录不成功原因的线索。目录权限应为 700 [rwx](不是 600)[rw-]
答案3
我之前遇到过类似的问题,尝试做一个
chmod -R 600 ~/.ssh
显然,如果文件权限正确但目录权限不一样,则可能会出现相同类型的权限错误。
我还认为您需要将文件从 id_rsa.pub 重命名为 authorized_keys。
答案4
向我们提供有关 中的设置的更多信息是有意义的/etc/ssh/sshd_config
,特别是StrictModes
(grep StrictModes /etc/ssh/sshd_config
)。StrictModes
是控制敏感度如何对每个用户各自的和sshd
的文件和文件夹权限做出反应的设置。 您也没有给我们中的设置。 非常相关,如果您的 SSH 服务器正在您放置文件的地方以外的地方寻找文件。~/.ssh
~/.ssh/authorized_keys
AuthorizedKeysFile
sshd_config
但除了目前给出的答案之外,这种情况可能还有多种原因。问题是,即使你尝试过,也没有足够的信息来准确猜测问题出在哪里。
还有一件事可能是 PAM 限制(UsePAM
在sshd_config
)。Ubuntu 曾经有过这个。如果用户帐户没有设置密码(仅公钥身份验证),则不允许进入。
但让我给你一个调试此类问题的通用方法。
常规故障排除sshd
我发现,在这种情况下,启动时sshd
不让其成为守护进程(“进入后台并与终端分离”)通常非常有用。通常,日志不会太有帮助,特别是当您出现配置错误时(至少这不是很明显的情况)。
你可以像这样从终端启动它:
# $(which sshd) -Ddp 10222
这将为您提供大量的调试输出,如果没有 ,这些输出将不会出现(如果没有-d
)或者如果您幸运的话,最终会出现在日志中。
注意:这$(which sshd)
是满足sshd
绝对路径要求的最佳方法。否则您将收到以下错误:sshd re-exec requires execution with an absolute path
。-p 10222
使sshd
监听该替代端口,覆盖配置文件 - 这样做是为了不与可能正在运行的sshd
实例发生冲突。确保在这里选择一个自由港。
这种方法帮助我多次发现问题,无论是身份验证问题、性能问题还是其他类型的问题。要获得真正详细的输出stdout
,请使用$(which sshd) -Ddddp 10222
(注意添加dd
以增加详细程度)。要获得更多调试优点,请查看man sshd
。
在客户端ssh
可能需要-v
(最多-vvv
)才能真正详细地了解它正在做什么。
日志行
... ubuntu sshd[8476]: User root not allowed because account is locked
暗示这就是问题所在,因此运行:
sudo passwd -u root