Estoy trabajando en OS X 10.8.5, completamente parcheado. Tengo un servidor OpenSSH actualizado instalado para /usr/local/sbin
escuchar en el puerto 1522. Los intentos de conexión dan como resultado ssh_exchange_identification: Connection closed by remote host
. sudo grep 'sshd' /var/log/* 2>/dev/null
en el servidor no devuelve casi nada, por lo que estoy tratando de recopilar más información en el servidor sobre la causa.
Según man sshd(8)
, -d
es el modo de depuración y envía una salida de depuración detallada a un error estándar. Agregué -d
a ProgramArguments
en el plist, pero el plist también se establece StandardErrorPath
en /dev/null
. Así que supongo que la información de depuración se descarta.
Revisé launchctl(1)
la página de manual, pero no veo qué debo hacer para modificar StandardErrorPath
para que esté registrado en alguna parte. La página del manual ni siquiera analiza el par nombre/valor.
¿Cómo debo cambiar la configuración para que el registro de depuración se registre en algún lugar y sepa dónde está ese "algún lugar"?
$ 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>
Para agregar el -d
argumento a sshd, debe agregarse como un nuevo elemento a la matriz:
<string>-d</string>
La sección debería verse así:
<key>ProgramArguments</key>
<array>
<string>-i</string>
<string>-d</string>
</array>
En lugar de editar los archivos plist directamente, puede usar /usr/libexec/PlistBuddy
(-h para mostrar la ayuda).
Hay un script de utilidad ssh-util.rb
que puede activar o desactivar el inicio de sesión. Es parte del OpenSSH-189
paquete que se encuentra en: opensource.apple.com.
Estos son los comandos necesarios para ejecutar (como se produce a partir de la secuencia de comandos Ruby):
/usr/bin/ruby ./ssh-util.rb -l on -v --debug --dryrun
o manualmente:
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
Cuando termine de depurar, deberá ejecutar:
/usr/bin/ruby ./ssh-util.rb -l off -v --debug --dryrun
o manualmente:
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
Para registrar correctamente los eventos, sshd
no debe establecer -d
cambios, ya que esto está reservado para la depuración, pero debe usar el usuario sshd_config
(no estoy seguro de dónde se encuentra en OSX).
En sshd_config
, hay una opción LogLevel
, que puede ajustar a sus necesidades, básicamente el nivel más detallado es DEBUG3
, que le brinda mucha información útil para la depuración.
LogLevel=DEBUG3
, ¿no se descartará porque StandardErrorPath=/dev/null
? (Lamento tener que preguntar. Normalmente no administro OpenSSH. Por lo general, "simplemente funciona")./dev/log
socket).
usuario83961
StandardErrorPath
.rprimus
ssh-util.rb
secuencia de comandos) y/var/log/sshd.log
se creó.rprimus
"Notes on OS X Logging"
. Mire adentro/etc/asl
y también eche un vistazo a/etc/asl.conf
. (El comentario de (@Jakuje sobre syslog es correcto).