在 Linux 上,我可以获取如下 sshd 日志:
sshd Accepted publickey for user from xxx.xxx.xxx.xxx port xxx ssh2: RSA SHA256:.....
并通过在文件中添加文件将它们发送到远程系统日志服务器/etc/rsyslog.d/
如何在 MacOS 10.14(Mojave)上获取类似的数据,并让 macOS 将数据发送到远程系统日志服务器?
我可以使用此命令获取我想要的数据:
log stream --process sshd --info --predicate "messageType = 'info'"
现在需要弄清楚如何配置 ASL(Apple System Logger)。
答案1
我最终使用 log 命令将消息流式传输到文件,然后使用外部程序(远程系统日志2) 将文件内容流式传输到远程 syslog 服务器。
为了将日志消息写入文件,我创建了一个包含以下内容的/var/log/sshd.log
文件:/Library/LaunchDaemons/log-streamer-sshd.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>log-streamer-sshd</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>-c</string>
<string>/usr/bin/log stream --info --style compact --predicate '(sender == "sshd")'</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceDescription</key>
<string>Start sshd log stream</string>
<key>ExitTimeOut</key>
<integer>1</integer>
<key>StandardOutPath</key>
<string>/var/log/sshd.log</string>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
在启动时,LaunchDaemon 运行 log 命令,仅选择 sshd 发送的消息。其输出写入 /var/log/sshd.log。
我对此的研究结果如下。
Apple 已经两次重新发明了 syslog 轮子。最初,OS X 使用 syslog 的方式与大多数 Unix/Linux 系统相同。日志消息按设施和严重性分类,并且可以配置 syslog.conf 以写入日志文件和远程 syslog 服务器。
后来,Apple 推出了 Apple System Log (ASL)。ASL 允许更精细的行为,例如通过元数据(例如进程 ID)分离日志消息,以及通过谓词制定复杂规则。ASL 还集成了 logrotate 功能。
从 macOS 10.2 Sierra 开始,日志记录的最终形式变成了统一日志记录 (UL)。UL 以专有且未记录的压缩二进制格式将日志存储在磁盘上,实际上是一个数据库。许多日志消息甚至可能没有写入磁盘,而只是暂时保存在内存中。UL 功能包括对日志消息访问的权限控制,控制哪些用户或组可以查看哪些消息。它还可以控制消息的显示或保存以保护隐私。根据开发人员的覆盖,日志消息中的字符串替换、数组和对象被视为具有私有数据,而整数替换和静态字符串则被认为没有私有数据。
读取 UL 日志的唯一方法是使用控制台 GUI 应用程序和日志命令行工具。一些开发人员创建了应用程序来帮助查询 UL,但这些只是日志命令的前端。Apple 没有提供任何 API 来以编程方式获取日志消息,只提供写入日志消息。日志可以通过 sysdiagnose 导出到不同的系统,但同样只能在另一台 Mac 上使用控制台或日志命令读取。
至少在 Mojave 中,大多数系统日志要么直接发送到 UL,要么从 syslog 和 ASL 重定向到 UL。我只能在 UL 中找到我想要的 sshd 消息。
另一种可能性是sshd
使用该-E
标志运行。这将涉及ssh.plist
在 LaunchDaemons 中编辑文件,但只能通过禁用系统完整性保护来完成。我认为这不太理想,而且会带来脆弱性(当操作系统升级时会发生什么?)。
更多信息链接: