我需要限制某些用户,以便他们只能使用 ssh 密钥通过 SSH 登录,而其他用户可以使用密钥或密码登录。
一个例子:
我希望 root 用户能够使用密钥远程登录(通过 sshd),这样就不会接受任何密码(即使密码正确)
对于其他用户(系统上的每个人),他们可以使用密钥和/或密码登录
我该怎么做呢?
答案1
我要做的是进行/etc/sshd/sshd_config
如下设置:
PermitRootLogin without-password
只是为了额外的安全,并避免 root 密码被锁定(它只允许 root 使用密钥登录)
我会使用AllowGroups
而不是AllowUser
,因为对我来说将用户添加到组比添加到 更方便,sshd_config
但这可能取决于您的个人喜好。
答案2
我认为你想要的是“匹配用户”。你使用它来匹配用户名,然后缩进一系列专门适用于该用户的配置设置。
Match User Joe
PasswordAuthentication no
Match User Jane
PasswordAuthentication yes
我有时使用它为客户端设置 chroot 仅 SFTP 访问。
答案3
设置 ssh 如下:
nano /etc/ssh/sshd_config
AllowUsers username1 username2 username3
重启 SSH
然后将密钥提供给那些您想避免使用密码的人。
ssh-keygen 用于为您生成密钥对。以下是创建您自己的个人私钥/公钥对的会话:
#ssh-keygen -t rsa
命令 ssh-keygen -t rsa 启动密钥对的创建。
我没有为我的设置输入密码(而是按下了 Enter 键)。
私钥保存在 .ssh/id_rsa 中。此文件是只读的,仅供您使用。其他人不得看到该文件的内容,因为它用于解密使用公钥加密的所有通信。
公钥保存在.ssh/id_rsa.pub中。
然后将其内容复制到您希望通过 SSH 连接到的系统的 .ssh/authorized_keys 文件中,而无需提示输入密码。
#scp id_rsa.pub remote system:~/.ssh/authorized_keys
最后锁定账户(仍然可以进行密钥认证。)
# passwd -l username1
答案4
以上所有方法都很棒,而且很有效,如果可以的话我可以稍微总结一下。我sshd_config
在大量服务器和风格中使用标准,使配置成为深思熟虑的过程,这就是我使用的。
我的用例:
- 根访问权限仅限于来自 2 个特定 IP 的密钥
- 自动化用户(例如 ansible)仅限于来自特定服务器的密钥(例如 RunDeck、Jenkins 等)
- 应用程序用户可能根本无法使用 ssh 登录
- 管理员和用户可以使用密钥或密码
首先,我主要使用Allow_Groups
,这样更容易管理多个机器和大量不同的用户。对于所有机器(例如自动化或监控)的共同用户,allow_Users
也很好用,但我仍然更喜欢使用组。
现在讨论实际的配置/etc/ssh/sshd_config
:
首先,只有特定组(或用户)才能进行 SSH 访问:
AllowGroups sshusr
这实际上意味着用户需要成为该组的成员sshusr
才能使用 SSH。为了防止应用程序用户获得 ssh 访问权限,只需确保他们是不是该团体的一名成员sshusr
。 笔记:这包括根,所以您需要添加root
到sshusr
组!
对于仅通过密钥进行 root 访问,请使用:
PermitRootLogin without-password
限制组使用仅密钥身份验证:
Match Group ansible,monitor
PasswordAuthentication no
默认情况下,我会关闭诸如等功能,port forwarding
但X11 forwarding
对于特定组,您可能需要将其打开并允许密码验证(通常on
是默认设置,但对于安全环境,您可能希望将其打开off
以使密钥成为默认值)
Match Group sysadmin,dbadmin
PasswordAuthentication yes
AllowTcpForwarding yes
PermitTunnel yes
X11Forwarding yes
sftp
然后你会遇到只有用户这样的特殊情况:
Match Group sftp
ForceCommand internal-sftp
PermitTTY no
MaxSessions 5
现在限制密钥以仅允许特定 IP 访问。这也适用于 FQDN,但我在这里没有使用它。在文件中将~/.ssh/authorized_keys
限制添加from=
到适用的密钥之前
from="10.1.1.1,10.2.2.2,10.3.3.0/24" ssh-rsa AAAAB3NTheRestOfMyKeyxyz
这将允许密钥仅从那些特定的 IP 上使用。
我相信这会对你以及其他很多人有帮助。