我需要禁止指定用户的 ssh 访问(本地主机除外)。
所以。ssh localhost
应该管用。ssh hostname
来自外部的不应为该用户工作。
所有其他用户应该照常工作。
答案1
AllowUsers
请参阅DenyUsers
sshd_config
手册页(也可能是AllowGroups
和DenyGroups
)。
user@host
基本上,这些指令采用以空格分隔的格式的用户模式列表。指令具有以下优先级:DenyUsers
、AllowUsers
、DenyGroups
和 finally AllowGroups
。
对于仅允许来自 的特定用户的简单情况localhost
,只需添加以下行:
AllowUsers user@localhost
这将隐式拒绝任何来自非user@localhost
.
答案2
如果您强制对特定用户进行公钥身份验证,然后使用from=
授权密钥文件中的选项限制他的公钥,情况会怎样。
强制特定用户使用公钥身份验证:
Match User Bad_User
PasswordAuthentication no
AuthorizedKeysFile /somewhere/the/user/cannot/touch
然后在授权密钥文件中配置他的密钥,如下所示:
from=localhost ssh-rsa AAAA...
您可以Match
在 中阅读有关指令的更多信息man sshd_config
,以及在 中阅读有关授权密钥选项的更多信息man sshd
。
答案3
您可以使用 PAM(sshd_config 中的 UsePAM)并添加
account required pam_access.so
到 ssh 的 PAM 配置。
然后您可以在中定义访问策略/etc/security/access.conf
+ : john : 127.0.0.1 ::1
- : john : ALL
+ : ALL : ALL
(未经测试)
答案4
如果您愿意限制该用户的 TCP 转发,您还可以在文件中进行配置(sshd_config
通常位于 )/etc/ssh/sshd_config
,规则Match
如下:
Match User <username>
AllowTcpForwarding no
Match User <username> Address *,!127.0.0.1,!::1
ForceCommand /bin/false
这将强制每当具有指定用户名的用户通过 SSH 登录时,如果不是来自本地主机(即 IP 地址 127.0.01 或 ::1),系统将运行/bin/false
以返回错误代码,而不是运行任何有用的内容,例如如地狱。
作为鲁迪迈尔 指出,有必要禁止端口转发,以避免用户打开一个初始 SSH 连接,将端口转发到本地主机并且没有运行命令(例如使用OpenSSH 的-N
参数-L
),然后通过该隧道打开后续的 SSH 连接,这似乎即将到来来自本地主机,因此被允许。