使用公钥进行 SSH 登录失败

使用公钥进行 SSH 登录失败

root在本地主机上运行 sshd 服务。使用ssh-keygen创建了两对 rsa 密钥user1。从 root/.ssh/id_rsa.pub 复制到 user1/.ssh/id_rsa.pub。将权限更改为 600。尝试过ssh -l user1 localhostssh -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 ~/.sshchmod -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

  1. 每当遇到 ssh 连接到服务器的问题时,最好添加标志-v,例如

    $ ssh -v host -l user
    
  2. 在上述两种情况下,公钥 ( id_rsa.pub) 都应添加到“远程用户的 .ssh/authorized_keys”文件中。在上述情况下,应同时添加到 root 和 user1 中。这可以通过以下方式轻松完成ssh-复制-id命令。

  3. /var/log/secure将提供有关登录不成功原因的线索。

  4. 目录权限应为 700 [rwx](不是 600)[rw-]

答案3

我之前遇到过类似的问题,尝试做一个

chmod -R 600 ~/.ssh 

显然,如果文件权限正确但目录权限不一样,则可能会出现相同类型的权限错误。

我还认为您需要将文件从 id_rsa.pub 重命名为 authorized_keys。

答案4

向我们提供有关 中的设置的更多信息是有意义的/etc/ssh/sshd_config,特别是StrictModesgrep StrictModes /etc/ssh/sshd_config)。StrictModes是控制敏感度如何对每个用户各自的和sshd的文件和文件夹权限做出反应的设置。 您也没有给我们中的设置。 非常相关,如果您的 SSH 服务器正在您放置文件的地方以外的地方寻找文件。~/.ssh~/.ssh/authorized_keysAuthorizedKeysFilesshd_config

但除了目前给出的答案之外,这种情况可能还有多种原因。问题是,即使你尝试过,也没有足够的信息来准确猜测问题出在哪里。

还有一件事可能是 PAM 限制(UsePAMsshd_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

相关内容