在MacOS Sierra上如何查找sshd日志

21

我想在我的Mac OS Sierra (10.12.4)上安装Pseudo-Distributed 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

<tab> 在这里表示一个制表符,重新加载配置文件:

$ killall -HUP syslogd

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

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

结果仍然相同,有人可以帮忙吗?

6个回答

31

苹果又一次决定重新发明轮子。

在超级用户窗口中

# 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

11

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

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

4

尝试以下操作:

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

接着,使用vi编辑器打开文件:

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属性列表而是创建一个新的/Library呢? - Max Coplan
请查看我的评论此处 - Max Coplan

3
我还有一个ssh问题需要进一步调试,但我不知道如何在任何常规位置中获取sshd调试日志。我只能编辑/System/Library/LaunchDaemons/ssh.plist文件,添加-E <日志文件位置>参数(例如/tmp/sshd.log)。我还编辑了/etc/ssh/sshd_config以更改LogLevel。通过这些更改,我能够在指定的日志文件中查看更详细的日志。
我对MacOS没有太多经验,所以我相信有更正确的配置方法,但由于没有更好的方法,这样做可以获取我需要的日志。

3
请注意,在 macOS 10.11 及以后的版本中,更改 /System 目录下的任何内容都需要禁用 系统完整性保护Apple 文档);可以参考 这里 来了解如何禁用它。请小心! - ssc

3
根据苹果的开发者网站,在macOS 10.12及以上版本中,日志记录行为已更改:

重要提示:

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

不幸的是,除非有人想出一种相当巧妙的方法从内存或这个神秘的“数据存储”中提取日志条目,否则我们可能就束手无策了 :/


1

有一些sshd日志在

/var/log/system.log

回复内容存在敏感词^**$ sshd_config: “使用DEBUG级别进行记录会侵犯用户的隐私,不建议使用。”

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接