You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于在C++中读取OpenSSH Windows事件日志所需Provider Name的咨询

在C++中读取OpenSSH Windows事件日志所需的Provider Name

嗨,我来帮你解决这个问题!你遇到的核心问题是OpenSSH在Windows事件日志中注册的正式Provider Name并不是你尝试的"OpenSSH",而是分角色的具体名称:

  • 如果你要读取SSH服务器的连接日志(这正是你需要的,用来检测新连接),请使用"OpenSSH SSH Server"作为provider_name参数。
  • 若需读取客户端侧的日志,则用"OpenSSH SSH Client"。

为什么"OpenSSH"无法生效?

Windows事件日志对Provider Name的匹配要求完全一致,OpenSSH在Windows系统中注册的是带角色的全称,而非缩写的"OpenSSH",所以之前的调用无法定位到正确的日志源。

快速验证方法

你可以打开Windows事件查看器,导航到应用程序和服务日志 > OpenSSH > Operational,右键点击该日志选择「属性」,在「常规」标签页就能看到准确的Provider Name,确认它确实是OpenSSH SSH Server。

修正后的代码示例

// 注意:如果你的项目使用Unicode字符集,要使用宽字符串
HANDLE hEventLog = OpenEventLog(NULL, L"OpenSSH SSH Server");
if (hEventLog == NULL) {
    // 处理错误,可调用GetLastError()获取具体错误码
    printf("打开事件日志失败,错误码:%lu\n", GetLastError());
    return 1;
}
// 后续读取日志或监听新条目逻辑

针对你的核心需求(监听新SSH连接)

既然你想实时捕捉新的SSH连接,除了读取已有日志,更高效的方式是使用NotifyChangeEventLog函数注册通知:

  • 打开日志句柄后,调用NotifyChangeEventLog并传入事件对象
  • 等待事件触发,再读取最新的日志条目
  • 解析日志时,可关注这些关键事件ID:
    • 事件ID 4:用户成功完成认证
    • 事件ID 10:SSH会话启动

这样就能实时收到新连接的通知,无需轮询日志。

备注:内容来源于stack exchange,提问作者rimono

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:38:08