我有一台运行 Ubuntu 14.04 x64 操作系统的服务器。
我的文件的一部分sshd_config
(整个文件):
Port 2202
Protocol 2
PermitRootLogin without-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /etc/ssh/keys/%u/authorized_keys
RhostsRSAAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
#PasswordAuthentication yes
UsePAM yes
在文件夹中,/etc/ssh/keys
每个系统用户都有自己的文件夹,其中包含authorized_keys
文件:
ls -l /etc/ssh/keys
drw------- 2 test.com test.com 4096 Nov 20 06:53 test.com
drw------- 2 root root 4096 Nov 20 02:29 root
这些authorized_keys文件的权限是正确的:
ls -l /etc/ssh/keys/*
/etc/ssh/keys/test.com:
total 4
-r-------- 1 test.com test.com 960 Nov 20 07:17 authorized_keys
/etc/ssh/keys/root:
total 4
-r-------- 1 root root 395 Nov 20 02:29 authorized_keys
我在 root 和 test.com 的authorized_keys 文件中有相同的公共 id_rsa 。
我可以通过 ssh 使用 root 登录,但使用 test.com 时,系统会提示我输入密码。
以下是尝试与 test.com 用户连接时的调试信息:
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/Ivan/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /Users/Ivan/.ssh/id_dsa
debug1: Next authentication method: password
当我尝试使用 root 登录时,我成功了:
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/Ivan/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
我用谷歌搜索了很多东西。找不到任何可以解决我的问题的东西。
我有一个使用命令创建系统用户的脚本useradd
,默认情况下这些用户没有密码。我发现没有密码的系统用户可能无法通过ssh登录,所以我给test.com用户添加了密码。没用。
我看到这UsePAM yes
可能是个问题。我将其设置为UsePAM no
.没用。
是的,我service ssh restart
在每次更改文件后都这样做了sshd_config
。
我想我已经尝试了一切,但现在我却一无所知。
任何帮助将不胜感激!
答案1
我遇到了同样的问题,发现 SELinux/usr/bin/sshd
在尝试远程访问某些用户时阻止了读取访问。通常适用于在/home/
.你可以运行
cat /var/log/messages | grep -i ssh
在目标服务器上,您应该会看到类似的行指示错误:
<Date/Time> <hostname> python: SELinux is preventing /usr/sbin/sshd from read access on the file authorized_keys.#012#012***** Plugin catchall (100. confidence) suggests **************************#012#012
If you believe that sshd should be allowed read access on the authorized_keys file by default.#012Then you should report this as a bug.#012
You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012#
ausearch -c 'sshd' --raw | audit2allow -M my-sshd#012# semodule -i my-sshd.pp#012`
您可以编辑 SELinux 权限以允许 ssh 连接,或者干脆将其关闭(安全性较低)来解决此问题。
答案2
sshd 在权限方面非常挑剔!
看来是目录权限/etc/ssh/keys/test.com/
不对!当前该目录是读/写的,但可能无法进入。
chmod u+x /etc/ssh/keys/test.com/ && chmod o+rx /etc/ssh/keys
应该可以解决你的问题。虽然 root 可以进入该目录,但我假设 sshd 检查authorized_keys文件本身的八进制权限为0700
或0755
+ 。0600
特别是,当StrictMode yes
.
如果没有目录的访问权限和适当的权限,则 sshd 出于安全考虑将无法读取或忽略authorized_keys 文件。
答案3
ls -l /etc/ssh/keys
drw------- 2 test.com test.com 4096 Nov 20 06:53 test.com
drw------- 2 root root 4096 Nov 20 02:29 root
没有x
该目录的权限=没有权限实际使用任何事物里面目录。有了这些权限,sshd
将能够获取 的目录列表,/etc/ssh/keys/test.com/
但无法访问 的内容/etc/ssh/keys/test.com/authorized_keys
。
对于root
,它有效是因为root
可以访问任何内容。