Cómo hacer que sshguard se ejecute al inicio en una Mac

4

He instalado sshguard usando Homebrew en mi máquina Mac OS X, pero ahora me gustaría que sshguard se inicie automáticamente cuando se inicie el sistema.

He intentado dos enfoques. En primer lugar, he intentado crear una carpeta en / Library / StartupItems llamada sshguard, y he creado un archivo StartupParameters.plist estándar junto con un archivo de script de shell bash llamado sshguard. Sin embargo, cuando reinicié mi máquina, sshguard nunca se estaba ejecutando (utilicé ps -ax | grep sshguard verificar).

El segundo enfoque fue crear un archivo llamado net.sshguard.sshguard en / Library / LaunchDaemons / con el siguiente XML:

<?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>KeepAlive</key>
  <true/>
  <key>Label</key>
  <string>net.sshguard.sshguard</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/sbin/sshguard</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>UserName</key>
  <string>matthew</string>
  <key>WorkingDirectory</key>
  <string>/usr/local/sbin</string>
</dict>
</plist>

Ahora cuando corro launchctl load -w /Library/LaunchDaemons/net.sshguard.sshguard.plist que parece instalar el script OK como launchctl list muestra que el script Daemon está instalado. Entonces corro launchctl start net.sshguard.sshguard y todo parece estar funcionando.

Sin embargo, cuando corro ps -ax | grep sshguard Puedo ver que sshguard no se está ejecutando realmente. También he intentado reiniciar, y cuando corro launchctl list sshguard no está en la lista.

Si ejecuto sshguard en modo de depuración SSHGUARD_DEBUG=true /usr/local/sbin/sshguard Parece que funciona bien.

Y he comprobado los permisos de net.sshguard.sshguard.plist y son los mismos que los otros archivos de trabajo, efectivamente 775.

¿Puede alguien ayudarme a recomendarme cómo hacer que sshguard se inicie automáticamente en una Mac?

Gracias, Mate

Matthew O'Riordan
fuente

Respuestas:

3

También estaba buscando una forma de hacer esto, y descubrí por qué no continuaría ejecutándose: es necesario especificar el archivo de registro que se debe monitorear (asumiendo sshguard 1.5). Prueba esto:

<?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>EnvironmentVariables</key>
    <dict>
        <key>SSHGUARD_DEBUG</key>
        <string>false</string>
    </dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>net.sshguard.sshguard</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/sbin/sshguard</string>
        <string>-l</string>
        <string>/var/log/secure.log</string>
    </array>
    <key>QueueDirectories</key>
    <array/>
    <key>RunAtLoad</key>
    <true/>
    <key>WatchPaths</key>
    <array/>
</dict>
</plist>
emptyflask
fuente
@ nighhwk1, eres un genio, ha funcionado perfectamente. Gracias.
Matthew O'Riordan
0

He utilizado este enfoque de baja tecnología y muy poco OS-X para iniciar demonios en el arranque de las máquinas OS X.

Primero crea un script que inicie tu demonio por ti, guárdalo en /usr/local/sbin/. Por ejemplo:

#!/bin/sh
# Make sure the system is really up before running this...
sleep 60s
# Export any environment variables you might need here...
#export SSHGUARD_DEBUG=true
# Start your daemon
/usr/local/sbin/sshguard

Asegúrate de que el script sea ejecutable:

sudo chmod 755 /usr/local/bin/start-sshguard

Prueba de que funciona desde la línea de comando así:

sudo /usr/local/bin/start-sshguard

Y ahora coloque una entrada en el crontab del usuario raíz que se ejecuta en el reinicio del sistema:

sudo echo "@reboot root /usr/local/sbin/start-sshguard" >> /etc/crontab

Debería comenzar con el arranque del sistema ahora sin tener que pasar por todas esas cosas de Launchd para que esto suceda.

Ian C.
fuente
Gracias por su sugerencia, pero realmente preferiría evitar una solución como esta debido a su "piratería". Al decir eso, si no tengo suerte con una solución más genérica, me aseguraré de probar y dar mi opinión aquí. Gracias de nuevo.
Matthew O'Riordan
@Matthew el problema es que está tratando de comprimir un demonio que no sea OS X en la semántica de control de lanzamiento de OS X. A veces eso no funciona bien. Solo porque se basa en OS X, no significa que sea compatible con OS X o amigable. Sólo BSD amigable. Y el método anterior es BSD amigable.
Ian C.
C, bueno, launchctl no funcionó, así que probé nuestra solución. Muy extrañamente, creo que he hecho todo bien, pero tampoco está funcionando. Creé el script start-sshguard y lo probé usando sudo, y funcionó bien. Luego agregué la línea al cron ejecutando crontab -e e insertando la línea "@reboot root / usr / local / sbin / start-sshguard" en el archivo. Pero cuando mi máquina arranca, y yo ps -ax | grep sshguard Veo que no está funcionando. Muy extraño, ¿tienes alguna otra idea? ¿Hay alguna manera de ver el registro de lo que sucedió con el trabajo cron?
Matthew O'Riordan
Lo primero que debe verificar es el buzón de correo de la raíz, ya que cualquier salida del trabajo cron se habría entregado allí. Tratar: sudo mail para leer el buzón de correo de la raíz.
Ian C.
Gracias a @Ian C, hubo un problema cuando ejecuté sudo mail, diciendo que la raíz del comando sh no existía. Así que cambié la línea "@reboot root / usr / local / sbin / start-sshguard" a "@reboot / usr / local / sbin / start-sshguard" y eso pareció funcionar (en la medida en que ya no recibí mensajes de correo al reiniciar "Sin embargo, sshguard todavía no se está ejecutando, y ahora no tengo mensajes de error. ¿Alguna otra idea?
Matthew O'Riordan
0

Parece que no estás haciendo nada malo con tu launchd lista de propiedades (cuando puede hacer que funcione, launchd es la mejor manera de hacer este tipo de cosas en Mac OS X, por cierto), pero aquí hay un par de cosas para verificar:

  • Hace usuario matthew tener los permisos necesarios para el directorio de trabajo ( /usr/local/sbin ) (al menos, lea y ejecute, posiblemente escriba si algo se envía al directorio de trabajo)? Además, si estás

  • Mientras estamos en esto, ¿por qué está configurando el directorio de trabajo para /usr/local/sbin? Este es el directorio donde se ejecutará el programa. en . Esto hace no Es necesario que sea el mismo directorio que se ejecutará el programa. desde , dado que has especificado la ruta completa. A menos que sepa que el programa va a manipular los archivos en ubicaciones relacionadas con su directorio de trabajo actual (la mayoría de los demonios no lo hacen, los directorios de trabajo son principalmente un soplo para los humanos pequeños), probablemente no necesite configurar esto en absoluto.

  • ¿Has echado un vistazo a la salida de sudo launchctl list net.sshguard.sshguard? Esto debería, como mínimo, darle el estado de salida de sshguard, que puede ayudarlo a descubrir por qué está saliendo.

  • Es sshguard ¿Uno de estos programas de bifurcación y salida que lanza un demonio en segundo plano y luego lo regresa a su terminal? Si es así, no puedes usarlo (directamente) con el KeepAlive llave - cuando sale, launchd piensa que ha dejado de funcionar e intenta iniciarlo de nuevo, lo cual, dependiendo de cómo sshguard maneja esto podría causar problemas. Si sshguard es fork-then-exit, y puede averiguar cómo le indica al fork que es el demonio real (un parámetro extra, o un comando ligeramente diferente, por ejemplo) que lo use directamente con launchd. Si no puedes, no uses el KeepAlive llave.

  • Finalmente, intente configurar las cosas con una GUI. Solía ​​recomendar Lingon aquí, pero ha llegado a todas las Mac-App-Store-we-want- £ 3. Sin embargo, es posible que pueda encontrar una de las versiones anteriores o una alternativa a través de Internet. Se asegurará de que no haya escrito nada incorrecto y le permitirá estar seguro de que no ha colocado algo en el lugar equivocado (lo que sugiere la falta de carga automática en el reinicio, aunque lo que describe hacer parece correcto yo).

Scott
fuente
1
Además de lo anterior, ¿es sshguard propiedad de root y sus archivos de configuración no son legibles y grabables por el mundo?
Matijs
Muchas gracias por tus comentarios. Como ha dicho, realmente me gustaría que esto funcionara con launchctl, en lugar de hackear un trabajo para esto. He comprobado los permisos y todo está bien, no hay archivos escritos por lo que puedo decir. Cuando ejecuto la aplicación manualmente, es decir, / usr / local / sbin / sshguard, funciona. He eliminado el directorio de trabajo. Cuando ejecuto el comando list net.sshguard.sshguard todo parece estar bien, el último código de salida es 0. Cuando launchctl list no veo ningún PID que indique que no se inició. sshguard no se bifurca. Así que sin GUI, ¿qué más puedo hacer?
Matthew O'Riordan
Descargué la GUI y lo intenté, y desafortunadamente obtengo el mismo resultado. ¿Alguna idea más?
Matthew O'Riordan