Ich arbeite an OS X 10.8.5, vollständig gepatcht. Ich habe einen aktualisierten OpenSSH-Server installiert, der /usr/local/sbin
Port 1522 überwacht. Verbindungsversuche führen zu ssh_exchange_identification: Connection closed by remote host
. sudo grep 'sshd' /var/log/* 2>/dev/null
auf 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 -d
der Debug-Modus und sendet eine ausführliche Debug-Ausgabe an den Standardfehler. Ich habe in der plist hinzugefügt -d
, ProgramArguments
aber die plist setzt auch StandardErrorPath
auf /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, StandardErrorPath
damit 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>
Um das -d
Argument 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>
Anstatt die Plist-Dateien direkt zu bearbeiten, können Sie /usr/libexec/PlistBuddy
(-h zum Anzeigen der Hilfe) verwenden.
Es gibt ein Hilfsskript ssh-util.rb
, das die Protokollierung ein- und ausschalten kann. Es ist Teil des OpenSSH-189
Pakets unter: opensource.apple.com.
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
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
Um Ereignisse korrekt zu protokollieren, sshd
sollten Sie keine -d
Schalter setzen, da dies dem Debuggen vorbehalten ist, sondern Sie sollten Benutzer sshd_config
(nicht sicher, wo sich der in OSX befindet).
In sshd_config
gibt 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.
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")./dev/log
Socket).
Benutzer83961
StandardErrorPath
.rprimus
ssh-util.rb
Skript) und/var/log/sshd.log
wurde erstellt.rprimus
"Notes on OS X Logging"
. Schau rein/etc/asl
und schau auch mal rein/etc/asl.conf
. (@Jakujes Kommentar zu Syslog ist richtig.)