如何限制仅本地主机的 ssh 访问?

如何限制仅本地主机的 ssh 访问?

我需要禁止指定用户的 ssh 访问(本地主机除外)。

所以。ssh localhost应该管用。ssh hostname来自外部的不应为该用户工作。

所有其他用户应该照常工作。

答案1

AllowUsers请参阅DenyUserssshd_config手册页(也可能是AllowGroupsDenyGroups)。

user@host基本上,这些指令采用以空格分隔的格式的用户模式列表。指令具有以下优先级:DenyUsersAllowUsersDenyGroups和 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 连接,这似乎即将到来来自本地主机,因此被允许。

相关内容