使用`-d`选项从Launchd启动时记录SSHD?


1

我正在使用OS X 10.8.5,完全打补丁。我安装了一个更新的OpenSSH服务器 /usr/local/sbin 侦听端口1522.连接尝试导致 ssh_exchange_identification: Connection closed by remote hostsudo grep 'sshd' /var/log/* 2>/dev/null 在服务器上几乎什么也没有返回,所以我试图在服务器上收集更多关于原因的信息。

根据 man sshd(8)-d 是调试模式,它将详细的调试输出发送到标准错误。我补充道 -dProgramArguments 在plist,但plist也设置 StandardErrorPath/dev/null。所以我猜测调试信息正在被丢弃。

我检查了 launchctl(1) 手册页,但我看不出我应该怎么做修改 StandardErrorPath 所以它记录在某个地方。手册页甚至没有讨论名称/值对。

我应该如何更改配置,以便在某处记录调试日志记录,我知道“某处”在哪里?


$ cat /System/Library/LaunchDaemons/ssh-7.1.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>Disabled</key>
    <true/>
    <key>Label</key>
    <string>com.openssh.sshd-v7.1</string>
    <key>Program</key>
    <string>/usr/local/sbin/sshd</string>
    <key>ProgramArguments</key>
    <array>
        <string>-i -d</string>
    </array>
    <key>Sockets</key>
    <dict>
            <key>Listeners</key>
            <dict>
                    <key>SockServiceName</key>
                    <string>1522</string>
            </dict>
    </dict>
    <key>inetdCompatibility</key>
    <dict>
        <key>Wait</key>
        <false/>
    </dict>
    <key>StandardErrorPath</key>
    <string>/dev/null</string>
    <key>SHAuthorizationRight</key>
    <string>system.preferences</string>
</dict>
</plist>

Answers:


1

从中正确记录事件 sshd 你不应该设置 -d swiches,因为这是为调试保留的,但你应该是用户 sshd_config (不确定OSX中的位置)。

sshd_config,有选择权 LogLevel,你可以根据自己的需要进行调整,基本上是最冗长的水平 DEBUG3,它为您提供了很多有助于调试的信息。


如果我订 LogLevel=DEBUG3,然后不会被丢弃因为 StandardErrorPath=/dev/null? (抱歉要问。我通常不会管理OpenSSH。通常它“只是工作”)。
jww

它没有登录到stderr(至少在其他* nix上),它是使用syslog或系统提供的其他记录器记录的(通常使用 /dev/log 插座)。
Jakuje

1
  1. 添加 -d 对sshd的参数,它应该作为一个新元素添加到数组中:

    <string>-d</string>
    

    该部分应如下所示:

    <key>ProgramArguments</key>
        <array>
            <string>-i</string>
            <string>-d</string>
        </array>
    
  2. 您可以使用,而不是直接编辑plist文件 /usr/libexec/PlistBuddy ( - 显示帮助)

  3. 有一个实用程序脚本 ssh-util.rb 可以打开/关闭日志。这是其中的一部分 OpenSSH-189 包发现于:opensource.apple.com。

    链接到ssh-util.rb

    以下是运行所需的命令(由ruby脚本生成):

    /usr/bin/ruby ./ssh-util.rb -l on -v --debug --dryrun
    

    或手动:

    sudo /usr/libexec/PlistBuddy -c "add :ProgramArguments:2 string '-ddd'" /System/Library/LaunchDaemons/ssh.plist
    sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
    sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
    sudo touch /var/run/com.openssh.sshd-asl-enabled
    
  4. 完成调试后,您需要运行以下任一项:

    /usr/bin/ruby ./ssh-util.rb -l off -v --debug --dryrun 
    

    或手动:

    sudo /usr/libexec/PlistBuddy -c "Delete :ProgramArguments:2" /System/Library/LaunchDaemons/ssh.plist
    sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
    sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
    sudo rm -f /var/run/com.openssh.sshd-asl-enabled
    

有关OS X日志记录的说明


我认为调试信息仍然会被丢弃,因为需要做些什么 StandardErrorPath
jww

'魔术'在最后一行完成(在/ var / run中创建文件)。我刚开始记录(通过 ssh-util.rb 脚本)和 /var/log/sshd.log 创建了。
rprimus

在我的回答中,我联系到了 "Notes on OS X Logging"。顺便拜访 /etc/asl 并且还看看 /etc/asl.conf。 (@Jakuje关于syslog的评论是正确的。)
rprimus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.