sshd_config 文件:Match 块可以通过 LocalPort 条件匹配服务端监听的端口‌。Match Address & LocalPort 的区别 (****)

以下,匹配服务器端,OK?

# 全局默认配置
PasswordAuthentication yes
PubkeyAuthentication yes

# Root用户配置(2322端口)
Match LocalPort 2322 User root
    AuthenticationMethods publickey,keyboard-interactive,password
    PermitRootLogin yes
    AllowTcpForwarding no
    X11Forwarding no
    PAMServiceName sshd_root_mfa

# Root用户配置(2422端口)
Match LocalPort 2422 User root
    AuthenticationMethods publickey password
    PermitRootLogin yes
    AllowTcpForwarding no
    X11Forwarding no
    PAMServiceName sshd_root_simple
 

 

 

 

linux, 以下是 sshd 的 sshd_config 文件中的一个语句块,判断是否有问题?并修正它:  

# Root用户配置(2322端口)
Match Address *,2322 User root
    AuthenticationMethods publickey,keyboard-interactive,password
    PermitRootLogin yes
    AllowTcpForwarding no
    X11Forwarding no
    PAMServiceName sshd_root_mfa
 
# Root用户配置(2422端口)
Match Address *,2422 User root
#    AuthenticationMethods password publickey
    AuthenticationMethods password
    PermitRootLogin yes
    AllowTcpForwarding no
    X11Forwarding no
    PAMServiceName sshd_root_simple

   
sshd_config 的执行顺序遵循“自上而下、后者覆盖前者”的规则‌,需特别注意重复指令和 Match 块的特殊行为。

注解:

1. Match 块条件语法错误‌

    原配置使用 Match Address *,2322 User root,但 Address 匹配的是客户端 IP,而非服务端端口;
    正确匹配本地监听端口应使用 ‌LocalPort‌ 条件。

2. 由于 Match Address 语法错误,导致覆盖操作失败。Match 可以匹配端口吗?

当(2322端口)在(2422端口)的上面时 ,(2422端口)不能执行。反之,(2422端口)在上面时,则可以执行。

DeepSeek-R1满血版 回答完成

深度思考完成 用时86秒

以下是针对 ‌sshd_config‌ 配置文件的修正与优化建议:


一、原配置问题分析

  1. Match 块条件语法错误

    • 原配置使用 Match Address *,2322 User root,但 Address 匹配的是客户端 IP,而非服务端端口;
    • 正确匹配本地监听端口应使用 ‌LocalPort‌ 条件1。
  2. AuthenticationMethods 参数格式错误

    • OpenSSH 要求 AuthenticationMethods 的值使用 ‌空格分隔认证方法列表‌,逗号分隔多个认证组合2;
    • 原配置 publickey,keyboard-interactive,passwordpublickey password 存在语法歧义。
  3. 端口与配置逻辑冲突

    • sshd 默认监听全局 Port 定义的端口,若需多端口差异化配置,需显式声明 Port 并配合 LocalPort 条件1。

二、修正后的配置

bashCopy Code

# 全局默认配置
Port 22               # 默认监听端口(可选显式声明)
PasswordAuthentication yes
PubkeyAuthentication yes

# Root用户配置(2322端口)
Match LocalPort 2322 User root
    AuthenticationMethods publickey keyboard-interactive
    PermitRootLogin yes
    AllowTcpForwarding no
    X11Forwarding no
    PAMServiceName sshd_root_mfa

# Root用户配置(2422端口)
Match LocalPort 2422 User root
    AuthenticationMethods publickey,password
    PermitRootLogin yes
    AllowTcpForwarding no
    X11Forwarding no
    PAMServiceName sshd_root_simple

三、关键修正说明

  1. 端口匹配逻辑

    • 使用 LocalPort 替代 Address,确保条件基于服务端监听端口触发1;
    • 示例:Match LocalPort 2322 User root 表示仅当客户端连接到本机 2322 端口且用户为 root 时生效。
  2. 认证方法语法

    • publickey keyboard-interactive‌:要求客户端依次通过公钥认证和键盘交互认证(多因素认证)2;
    • publickey,password‌:允许客户端选择公钥或密码认证(单因素任选其一)2。
  3. 端口全局声明

    • 若需同时监听多个端口(如 22、2322、2422),需在全局配置中添加 Port 指令:

      bashCopy Code

      Port 22
      Port 2322
      Port 2422
      

四、操作与验证

  1. 重启 SSH 服务

    bashCopy Code

    systemctl restart sshd # Systemd 系统 
    rc-service sshd restart # Alpine Linux

  2. 测试端口与认证规则

    bashCopy Code

    ssh -p 2322 root@localhost # 触发 2322 端口的 MFA 认证
    ssh -p 2422 root@localhost # 触发 2422 端口的密码或公钥认证

  3. 查看生效配置

    bashCopy Code

    sshd -T | grep -E "AuthenticationMethods|PermitRootLogin"


五、安全建议

  • 最小化 Root 登录权限‌:生产环境建议禁用 PermitRootLogin yes,改用普通用户登录后切换 Root;
  • 强化认证组合‌:优先使用 publickey 替代密码认证,并结合 MFA 提升安全性3;
  • 限制端口暴露‌:通过防火墙控制仅允许可信 IP 访问高权限端口(如 2322、2422)。

Match 可以用来匹配端口吗?

DeepSeek-R1满血版 回答完成

深度思考完成 用时15秒,搜索全网20篇资料

是的,Match 块可以通过 LocalPort 条件匹配服务端监听的端口‌17。以下是关键要点:


一、端口匹配的正确语法

  1. 使用 LocalPort 指令
    Match 块中,通过 LocalPort 指定服务端监听的端口:

    
    

    bashCopy Code

    Match LocalPort 2322 User root # 匹配到本机 2322 端口的 root 用户连接

  2. 示例配置

    bashCopy Code

    # 全局配置
    Port 22
    PermitRootLogin no
    
    # 当客户端连接到 2322 端口且用户为 root 时生效
    Match LocalPort 2322 User root
        PermitRootLogin yes           # 允许 root 登录
        AuthenticationMethods publickey
    

二、注意事项

  1. 区分 LocalPortPort

    • Port 是全局指令,用于声明服务端监听的端口;
    • LocalPortMatch 的条件,用于匹配实际接收连接的端口17。
  2. 多端口监听场景
    需在全局配置中显式声明所有监听端口:

    bashCopy Code

    Port 22
    Port 2322 # 声明监听 2322 端口


三、验证生效配置

  1. 重启 SSH 服务

    
    

    bashCopy Code

    systemctl restart sshd # Systemd 系统
    rc-service sshd restart # Alpine Linux

  2. 测试端口匹配规则

    
    

    bashCopy Code

    ssh -p 2322 root@localhost # 应触发 Match 块内的配置

  3. 查看实际生效参数

    
    

    bashCopy Code

    sshd -T | grep "permitrootlogin" # 输出应为 "yes"(仅当匹配到 2322 端口时)


四、替代方案(不推荐)

若需基于客户端 IP 限制访问端口,可结合 Address 条件:


bashCopy Code

Match Address 192.168.1.0/24   # 匹配客户端 IP 段
    PermitRootLogin yes         # 允许该 IP 段的 root 登录

但此方式无法直接匹配服务端端口7。


总结:‌Match 块通过 LocalPort 条件实现服务端端口的精准匹配‌,需与全局 Port 指令配合使用17。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值