为同一用户创建特定于端口的 SSH 身份验证

信息安全 验证 SSH 多因素 港口
2021-08-21 18:43:38

我有一个运行 SSHD 的 Linux 服务器,想知道是否可以对其进行配置,这样在 LAN 内您只需要一个 RSA 密钥来进行身份验证(在端口 X 上),但从 LAN 外部用户需要进行身份验证使用 PAM 模块(通过端口 Y)生成的 RSA 密钥和 OTP 密码?

我尝试使用匹配条件配置 /etc/ssh/sshd_config :

match user XX
   LocalPort 22
   PasswordAuthentication no
   RSAAuthentication yes

match user XX
   LocalPort 12345
   PasswordAuthentication yes
   RSAAuthentication no

它给了我错误:bad parameter暗示不支持此命令,尽管在 sshd_config 手册中它说它是。

总之,我的问题是:是否可以根据他们 SSH 进入的端口为同一用户提供不同的身份验证方法?

3个回答

实际上匹配表达式必须在同一行。所以这应该可以按预期工作/etc/ssh/sshd_config

Match User XX LocalPort 22
   PasswordAuthentication no
   RSAAuthentication yes

Match User XX LocalPort 12345
   PasswordAuthentication yes
   RSAAuthentication no

请注意,该Match块以配置文件结尾或其他Match指令结尾。缩进只是为了美观。因此,请勿Match在现有配置文件的中间添加一些行。因此,只需将Match块放在文件末尾即可。

警告OpenSSH 是使用硬编码的监听端口限制编译的,默认为 8(Debian、Ubuntu ...),并且启动逻辑似乎以与配置指令相反的顺序打开端口,结果拒绝打开默认 SSH 22 端口时您声明的端口数量超过了允许的数量……您已经猜到您只是失去了对系统的 SSH 访问权限!如果你需要超过 8 个 SSH 端口,我建议只保留 22 个由常规服务/守护进程处理,并通过 xinetd 设置额外的 SSH 端口

您可以ssh使用两个 sshd_config 文件-fsshd. 一个配置文件将包含 OTP/pam 模块,而另一个仅允许基于密钥的身份验证。

无论如何,两者都会根据自己的私钥对用户进行身份验证。

提醒一句:您必须手动跟踪 SSH 守护程序的更新,因为您的系统很可能只会更新一个配置文件而不会更新另一个。

这是类似情况的帖子的链接:https ://www.wikidsystems.com/support/wikid-support-center/how-to/how-to-configure-wikid-with-putty-and-ssh-for -vnc两个 sshd 设置,一个转发到另一个,一个使用密钥,另一个使用 OTP。不是你想要的,但可能会有所帮助。