在特定接口上禁用 SSH 密码身份验证

Heg*_*a79 6 ssh openwrt dropbear

我有一个 OpenWrt 路由器,我想在 SSH 上禁用密码身份验证,以便只能使用密钥进行身份验证。这可以通过遵循文档中的指南轻松实现,但是,我只想在 WAN 接口上禁用密码身份验证,这可能吗?

mjt*_*ner 11

此答案适用于 OpenSSH。OpenWRT 默认包含 Dropbear,因此您需要按照此链接替换它(基本上,安装openssh-server和禁用dropbear)。

使用 OpenSSH,您可以使用两种可能的机制实现您的愿望:

  1. sshdLAN 和 WAN 接口的单独配置。这仅在您拥有静态 WAN IP 时才有效(无法告诉sshd侦听特定接口,只能侦听特定 IP)。
  2. 只允许对 LAN 中的客户端进行密码验证。

选项1:

在 LAN 配置文件(例如,/etc/ssh/sshd_config默认文件)中,您将拥有如下内容:

PasswordAuthentication yes
Listen 192.168.1.1:22
Run Code Online (Sandbox Code Playgroud)

在 WAN 配置文件中(例如/etc/ssh/sshd_config_wan

PasswordAuthentication no
Listen 10.1.1.1:22    
Run Code Online (Sandbox Code Playgroud)

在上面,192.168.1.1 是您的 LAN 接口 IP,10.1.1.1 是您的 WAN IP 地址,在这两种情况下,22 是要侦听的端口。您可以使用 to-f选项指定要加载的配置文件sshd。您需要将默认的 init 脚本复制到一个新脚本,并将其修改为sshd使用-f /etc/ssh/sshd_config_wan.

选项 2:

/etc/ssh/sshd_config,把这个在最终的文件:

PasswordAuthentication no

Match address 192.168.1.0/24
    PasswordAuthentication yes
Run Code Online (Sandbox Code Playgroud)

在这里,您将禁用密码验证,但 LAN 上的地址除外(此处假设为 192.168.1.0/24)。