将 ssh 限制为本地网络,git 用户除外

Try*_*gve 6 ssh git

我有一个使用 Gitlab 和 OpenVPN 设置的 Ubuntu 12.04 服务器作为我们的 git 和 vpn 服务器。

目前我已经在防火墙中打开了端口 1194 以打开 OpenVPN 并让用户通过 rsa 证书和 google auth 密钥进行身份验证。

我还没有为 SSH 流量打开防火墙,因为我不希望 SSH 完全暴露给 WAN。但是,我们需要能够在不连接到 vpn 的情况下进行推拉。

如何只为有限的 git 用户打开对 WAN 的 ssh 访问,同时允许管理员从 LAN 访问服务器?

我怀疑我应该在 sshd_config 文件中寻找使用匹配组的方向。正如在这个问题中看到的:“我如何设置 OpenSSH 每用户身份验证方法? ”,有人有这方面的经验吗?


编辑:

我最初接受了使用 access.conf 来限制登录访问的答案。但是后来的答案表明,可以通过 match 指令或使用 username@hostaddress 语法在 sshd.conf 中实现相同的目的。

起初我觉得把它放在 sshd 中更直观,而且对于其他管理员来说可能更容易维护和理解。与 sshd.conf 相比,使用 access.conf 有什么强大的优势吗?

如果我要对这里提到的选项的直观程度进行范围划分,我会说: 1. sshd.conf 2. access.conf 3. IpTables

你同意?

Den*_*ker 5

您正在寻找pam_access,有了它,您可以配置 sshd 以接受来自本地网络的所有用户和来自任何地方的 git 用户的身份验证。

就像是:

+ : ALL : 10. crond :0 tty1 tty2 tty3 tty4 tty5 tty6
+ : git : ALL
- : ALL : ALL
Run Code Online (Sandbox Code Playgroud)

在您的 access.conf 中应该可以解决问题


sci*_*rus 5

您可以使用sshd_config中的AllowGroupsAllowUsersDenyGroupsDenyUsers指令来控制允许用户登录的位置。它们按照DenyUsersAllowUsersDenyGroupsAllowGroups的顺序进行处理。AllowUsers可以包含主机以及用户名;我认为其他人只允许名字。

比方说你的

  • 局域网是192.168.1.0/24
  • git 用户名为 git
  • 管理员用户名为 alice 和 bob

在 sshd_config 中你会说

AllowUsers alice@192.168.1.0/24 bob@192.168.1.0/24 git
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用Match指令来完成此操作。match 指令允许您根据条件(例如用户连接的地址)更改 sshd 的行为。

在sshd_config的全局部分中,您将拥有

AllowUsers git
Run Code Online (Sandbox Code Playgroud)

在文件末尾,您可以使用以下命令覆盖 LAN 的此设置

Match Address 192.168.1.0/24
    AllowUsers alice bob git
Run Code Online (Sandbox Code Playgroud)