在哪里可以找到 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
<tab>
在这里表示制表符,并重新加载配置:
$ 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 <log file location>
参数(例如/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 VERBOSE
和 LogLevel DEBUG3
没有帮助。
根据 man sshd_config : “使用 DEBUG 级别登录会侵犯用户隐私,不建议使用。”
顺便说一句,我重新启动 sshd 不是使用 launchctl,而是使用系统偏好设置共享,勾选远程登录。
在那里,我注意到选项:允许访问...
我怀疑这个设置在 /etc/ssh/sshd_config 之外 (易于检查,但我没有时间)。
请注意,Mac OS X 不是 Unix:Apple 开发人员可以在幕后做许多奇怪的事情,而无需关心我们的命令行用户。
【讨论】:
以上是关于在哪里可以找到 MacOS sierra 上的 sshd 日志的主要内容,如果未能解决你的问题,请参考以下文章
sh 在macOS Sierra上的virtualenv中安装psycopg2
markdown macOS Sierra上的本地SSL网站