在哪里可以找到 MacOS sierra 上的 sshd 日志

Posted

技术标签:

【中文标题】在哪里可以找到 MacOS sierra 上的 sshd 日志【英文标题】:Where to find sshd logs on MacOS sierra 【发布时间】:2017-09-09 00:26:55 【问题描述】:

我想在我的 Mac OS Sierra (10.12.4) 上安装伪分布式 HBase 环境,它需要安装 ssh 并且可以使用ssh localhost 登录而无需密码。但有时我在使用ssh 登录时会遇到错误。首先是问题背景,实际问题是我在哪里可以找到sshd 的调试日志,以便我进一步知道为什么日志记录失败?

据我所知,Mac OS 已经安装了sshd 并使用launchd 来管理它,我知道通过sshd -E /var/log/sshd.log 输出调试日志的一种方法,但是当我查看/etc/ssh/sshd_config 配置时,有两个行:

#SyslogFacility AUTH
#LogLevel INFO

我猜这两行是用来配置调试模式的,然后我把前面的#去掉,把LogLevel设置为DEBUG3,然后重启sshd

$ launchctl unload -w /System/Library/LaunchDaemons/ssh.plist
$ launchctl load -w /System/Library/LaunchDaemons/ssh.plist

然后我在/etc/syslog.conf中设置日志路径:

auth.*<tab>/var/log/sshd.log

&lt;tab&gt;在这里表示制表符,并重新加载配置:

$ killall -HUP syslogd

但是当我执行ssh localhost 时,在/var/log 文件夹中找不到sshd.log 文件。我也试过配置/etc/asl.log:

> /var/log/sshd.log format=raw
? [= Facility auth] file sshd.log

结果还是一样,谁能帮帮我?

【问题讨论】:

【参考方案1】:

像往常一样,Apple 决定重新发明***。

在超级用户窗口中

# log config --mode "level:debug" --subsystem com.openssh.sshd
# log  stream --level debug  2>&1 | tee /tmp/logs.out

在另一个窗口中

$ ssh localhost
$ exit

返回超级用户窗口

^C (interrupt)
# grep sshd /tmp/logs.out
2019-01-11 08:53:38.991639-0500 0x17faa85  Debug       0x0                  37284  sshd: (libsystem_network.dylib) sa_dst_compare_internal <private>@0 < <private>@0
2019-01-11 08:53:38.992451-0500 0xb47b5b   Debug       0x0                  57066  socketfilterfw: (Security) [com.apple.securityd:unixio] open(/usr/sbin/sshd,0x0,0x1b6) = 12
...
...

在超级用户窗口,恢复默认sshd日志

# log config --mode "level:default" --subsystem com.openssh.sshd

【讨论】:

【参考方案2】:

您可以在 /var/log/system.log 中找到它。如果按“sshd”过滤会更好:

cat /var/log/system.log | grep sshd

【讨论】:

【参考方案3】:

试试这个

cp /System/Library/LaunchDaemons/ssh.plist /Library/LaunchDaemons/ssh.plist

然后

vi /Library/LaunchDaemons/ssh.plist

并添加你的 -E 如下所示

 <array>
                    <string>/usr/sbin/sshd</string>
                    <string>-i</string>
                    <string>-E</string>
                    <string>/var/log/system.log</string> 
 </array>

最后重新启动 sshd 现在您将在 /var/log/system.log 中看到 sshd 日志

launchctl unload /System/Library/LaunchDaemons/ssh.plist && launchctl load -w /Library/LaunchDaemons/ssh.plist

【讨论】:

为什么不简单地修改 /System plist 而不是创建一个新的 /Library 呢? 编辑:见我的评论here【参考方案4】:

我还有一个 ssh 问题,我想进一步调试,但无法弄清楚如何让 sshd 调试日志出现在任何常见的地方。我求助于编辑/System/Library/LaunchDaemons/ssh.plist 文件以添加-E &lt;log file location&gt; 参数(例如/tmp/sshd.log)。我还编辑了/etc/ssh/sshd_config 以更改 LogLevel。通过这些更改,我能够在指定的日志文件中查看更详细的日志。

我对 MacOS 没有太多经验,所以我确信有更正确的方法来配置它,但由于缺乏更好的方法,这得到了我正在寻找的日志。

【讨论】:

请注意,在 macOS 10.11 及更高版本上,更改/System 下的任何内容都需要禁用System Integrity Protection (Apple Docs);参见例如here 了解如何禁用它。小心!【参考方案5】:

根据 Apple 的 developer website,日志记录行为在 macOS 10.12 及更高版本中发生了变化:

重要:

统一日志记录可在 ios 10.0 及更高版本、macOS 10.12 及更高版本、tvOS 10.0 及更高版本以及 watchOS 3.0 及更高版本中使用,并取代 ASL(Apple 系统记录器)和 Syslog API。从历史上看,日志消息被写入磁盘上的特定位置,例如 /etc/system.log。统一的日志系统将消息存储在内存和数据存储中,而不是写入基于文本的日志文件。

不幸的是,除非有人想出一个非常聪明的方法来从内存或这个神秘的“数据存储”中提取日志条目,否则我认为我们是 SOL :/

【讨论】:

【参考方案6】:

有一些sshd登录

/var/log/system.log

例如

Apr 26 19:00:11 mac-de-mamie com.apple.xpc.launchd[1] (com.openssh.sshd.7AAF2A76-3475-4D2A-9EEC-B9624143F2C2[535]): Service exited with abnormal code: 1

不是很有指导意义。我怀疑是否可以获得更多。 sshd_config 中的 LogLevel VERBOSELogLevel DEBUG3 没有帮助。

根据 man sshd_config : “使用 DEBUG 级别登录会侵犯用户隐私,不建议使用。”

顺便说一句,我重新启动 sshd 不是使用 launchctl,而是使用系统偏好设置共享,勾选远程登录。

在那里,我注意到选项:允许访问...

我怀疑这个设置在 /etc/ssh/sshd_config 之外 (易于检查,但我没有时间)。

请注意,Mac OS X 不是 Unix:Apple 开发人员可以在幕后做许多奇怪的事情,而无需关心我们的命令行用户。

【讨论】:

以上是关于在哪里可以找到 MacOS sierra 上的 sshd 日志的主要内容,如果未能解决你的问题,请参考以下文章

macOS 10.12 Sierra 上的捆绑错误

sh 在macOS Sierra上的virtualenv中安装psycopg2

markdown macOS Sierra上的本地SSL网站

在macOS High Sierra 10.13.3上的Grails中的FixtureException

sh 解决方法adb断开macOS Sierra上的问题

macOS Sierra 上的 Tizen Studio 和 SDB