Protokollierung für SSHD beim Start von Launchd mit der Option "-d"?

Ich arbeite an OS X 10.8.5, vollständig gepatcht. Ich habe einen aktualisierten OpenSSH-Server installiert, der /usr/local/sbinPort 1522 überwacht. Verbindungsversuche führen zu ssh_exchange_identification: Connection closed by remote host. sudo grep 'sshd' /var/log/* 2>/dev/nullauf dem Server gibt fast nichts zurück, also versuche ich, mehr Informationen über die Ursache auf dem Server zu sammeln.

Laut man sshd(8)ist -dder Debug-Modus und sendet eine ausführliche Debug-Ausgabe an den Standardfehler. Ich habe in der plist hinzugefügt -d, ProgramArgumentsaber die plist setzt auch StandardErrorPathauf /dev/null. Ich vermute also, dass die Debugging-Informationen verworfen werden.

Ich habe launchctl(1)die Manpage überprüft, sehe aber nicht, was ich ändern soll, StandardErrorPathdamit sie irgendwo protokolliert wird. Die Manpage geht nicht einmal auf das Name/Wert-Paar ein.

Wie sollte ich die Konfiguration ändern, damit die Debug-Protokollierung irgendwo protokolliert wird und ich weiß, wo sich dieses "irgendwo" befindet?


$ 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>

Antworten (2)

  1. Um das -dArgument zu sshd hinzuzufügen, sollte es als neues Element zum Array hinzugefügt werden:

    <string>-d</string>
    

    Der Abschnitt sollte folgendermaßen aussehen:

    <key>ProgramArguments</key>
        <array>
            <string>-i</string>
            <string>-d</string>
        </array>
    
  2. Anstatt die Plist-Dateien direkt zu bearbeiten, können Sie /usr/libexec/PlistBuddy(-h zum Anzeigen der Hilfe) verwenden.

  3. Es gibt ein Hilfsskript ssh-util.rb, das die Protokollierung ein- und ausschalten kann. Es ist Teil des OpenSSH-189Pakets unter: opensource.apple.com.

    Link zu ssh-util.rb

    Hier sind die erforderlichen auszuführenden Befehle (wie vom Ruby-Skript erzeugt):

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

    oder manuell:

    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. Wenn Sie mit dem Debuggen fertig sind, müssen Sie entweder Folgendes ausführen:

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

    oder manuell:

    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
    

Hinweise zur OS X-Protokollierung

Ich denke, die Debugging-Informationen werden trotzdem verworfen, weil etwas mit getan werden muss StandardErrorPath.
Die 'Magie' wird in der letzten Zeile ausgeführt (Erstellen der Datei in /var/run). Ich habe gerade die Protokollierung eingeschaltet (über das ssh-util.rbSkript) und /var/log/sshd.logwurde erstellt.
In meiner Antwort habe ich verlinkt "Notes on OS X Logging". Schau rein /etc/aslund schau auch mal rein /etc/asl.conf. (@Jakujes Kommentar zu Syslog ist richtig.)

Um Ereignisse korrekt zu protokollieren, sshdsollten Sie keine -dSchalter setzen, da dies dem Debuggen vorbehalten ist, sondern Sie sollten Benutzer sshd_config(nicht sicher, wo sich der in OSX befindet).

In sshd_configgibt es die Option LogLevel, die Sie an Ihre Bedürfnisse anpassen können, im Grunde ist die ausführlichste Stufe DEBUG3, die Ihnen viele Informationen gibt, die für das Debuggen hilfreich sind.

Wenn ich setze LogLevel=DEBUG3, wird es dann nicht verworfen, weil StandardErrorPath=/dev/null? (Tut mir leid, dass ich fragen muss. Normalerweise administriere ich OpenSSH nicht. Normalerweise "funktioniert es einfach").
Es wird nicht auf stderr protokolliert (zumindest auf anderen * nix), es wird mit syslog oder einem anderen vom System bereitgestellten Logger protokolliert (normalerweise mit /dev/logSocket).