使用公钥的SSHlogin失败

本地主机上运行sshd服务。 使用ssh-keygen为rootuser1创build了两对rsa密钥。 从root / .ssh / id_rsa.pub复制到user1 / .ssh / id_rsa.pub。 将权限更改为600.尝试了ssh -l user1 localhostssh -l root localhost但都失败, 权限被拒绝(publickey,keyboard-interactive)。 。 我必须将公钥复制到~/.ssh文件夹中吗? configuration有什么问题? 为什么我无法连接到本地主机?

文件/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

我正在尝试连接到本地主机。 我必须能够使用公钥才能login到user1,同时可以用公钥和/或密码作为rootlogin。


编辑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麻烦文章: 问题和解决scheme

    我遇到这个问题,当我试图login到一个没有密码的帐户,即使我使用SSH密钥对authentication,并已closures密码login。 解决方法是使用我的root帐户设置密码:

     passwd user1 Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully 
    1. 每当遇到一个服务器ssh的问题时,总是最好添加-v标志,例如

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

    3. /var/log/secure将保存为什么login不成功的线索。

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

    我碰到了一个类似的问题,而后来尝试做一个

     chmod -R 600 ~/.ssh 

    显然,如果文件的权限是正确的,但是目录权限不是一样的权限错误可以出现。

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

    一些注意事项:由于您已经明确禁用了密码authentication,您不能使用密码login。 我相信你必须configuration允许的其他用户(匹配用户可能是最好的方式前进)。 另外,您需要特别允许root用户(PermitRootLogin将其设置为yes)。

    向我们提供一些关于/etc/ssh/sshd_config的设置的更多信息是有意义的,特别是StrictModesgrep StrictModes /etc/ssh/sshd_config )。 StrictModes是控制sshd对每个用户各自的~/.ssh~/.ssh/authorized_keys的文件和文件夹权限的敏感程度的设置。 你也没有给我们sshd_configAuthorizedKeysFile的设置。 非常相关,如果你的SSH服务器正在寻找文件的地方,而不是你把它。

    但是,除了迄今为止的答案之外,可以有多种原因。 问题是即使你尝试了,也没有足够的信息来确定猜测是什么错误。

    还有一件事情可以是PAM限制( sshd_config UsePAM )。 Ubuntu曾经在某个时候有这个。 如果用户帐户没有设置密码(仅公共密钥authentication),则不允许进入。

    但让我给你一个通用的方法来debugging这样的问题。

    通用的sshd故障排除

    在这种情况下,我发现通常非常有用的是启动sshd而不让它守护进程(“进入后台并从terminal分离”)。 通常日志不会太有帮助,特别是当你有一个configuration错误(至less这不是明显的例子)。

    你从这样的terminal开始:

     # $(which sshd) -Ddp 10222 

    这会给你足够的debugging输出,否则不会出现(没有-d ),或者如果你幸运的话,最终会在日志中出现。

    注意: $(which sshd)是满足绝对pathsshd要求的最佳方法。 否则,你会得到以下错误: sshd re-exec requires execution with an absolute path-p 10222使sshd监听那个替代端口,覆盖configuration文件 – 这样它就不会与可能运行的sshd实例冲突。 确保在这里select一个空闲的端口。

    这种方法在寻找问题方面帮了我很多忙,无论是身份validation问题,性能问题还是其他types的问题。 为了得到真正详细的输出到stdout ,使用$(which sshd) -Ddddp 10222 (注意添加dd来增加详细程度)。 为了更好的debugging善良检查man sshd

    在客户端, ssh可以把-v (高达-vvv-vvv真正冗长的。


    日志行

     ... ubuntu sshd[8476]: User root not allowed because account is locked 

    提示这是问题,所以运行:

     sudo passwd -u root 

    在CentOS上,selinux可以阻止authentication。 使用以下命令解决问题:

     restorecon -Rv ~ /. ssh