Como fazer o sshguard rodar na inicialização de um Mac

4

Instalei o sshguard usando o homebrew na minha máquina Mac OS X, mas agora gostaria de fazer o sshguard ser inicializado automaticamente quando o sistema é iniciado.

Eu tentei duas abordagens. Em primeiro lugar, tentei criar uma pasta em / Library / StartupItems chamada sshguard e criei um arquivo StartupParameters.plist padrão junto com um arquivo de script shell bash chamado sshguard. Quando reiniciei minha máquina, o sshguard nunca estava em execução (usei ps -ax | grep sshguard para verificar).

A segunda abordagem foi criar um arquivo chamado net.sshguard.sshguard em / Library / LaunchDaemons / com o seguinte 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>

Agora, quando eu executar launchctl load -w /Library/LaunchDaemons/net.sshguard.sshguard.plist , aparece a instalação do script, OK, pois launchctl list mostra que o script Daemon está instalado. Eu então corro launchctl start net.sshguard.sshguard e tudo parece estar funcionando.

No entanto, quando executo ps -ax | grep sshguard , vejo que o sshguard não está sendo executado. Eu tentei reiniciar também, e quando eu executar launchctl list sshguard não está na lista.

Se eu executar o sshguard no modo de depuração SSHGUARD_DEBUG=true /usr/local/sbin/sshguard , parece que funciona bem.

E eu verifiquei as permissões de net.sshguard.sshguard.plist e elas são as mesmas que os outros arquivos de trabalho, efetivamente 775.

Alguém pode ajudar a me aconselhar sobre como fazer com que o sshguard inicie automaticamente em um Mac?

Obrigado Matt

    
por Matthew O'Riordan 24.08.2011 / 19:33

3 respostas

3

Eu também estava procurando uma maneira de fazer isso e descobri por que ele não continuaria: você precisa especificar o arquivo de log a ser monitorado (assumindo o sshguard 1.5). Tente isto:

<?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>
    
por 26.08.2011 / 01:30
0

Eu usei essa abordagem de baixa tecnologia e muito-muito-não-OS-X para iniciar daemons na inicialização de máquinas OS X.

Primeiro, crie um script que inicie seu daemon para você, salve-o em /usr/local/sbin/ . Por exemplo:

#!/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

Certifique-se de que o script seja executável:

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

Teste se funciona da linha de comando da seguinte forma:

sudo /usr/local/bin/start-sshguard

E agora coloque uma entrada no crontab do usuário root que é executado na reinicialização do sistema:

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

Ele deve iniciar na inicialização do sistema agora sem ter que passar por todas as coisas do Launchd para fazer isso acontecer.

    
por 24.08.2011 / 22:10
0

Parece que você não está fazendo nada de errado com a sua lista de propriedades launchd (quando você pode fazê-lo funcionar, launchd é de longe a melhor maneira de fazer esse tipo de coisa no Mac OS X, o caminho), mas aqui estão algumas coisas para verificar:

  • O usuário matthew tem as permissões necessárias para o diretório de trabalho ( /usr/local/sbin ) (pelo menos, ler e executar, possivelmente gravar se algo for enviado para o diretório de trabalho)? Além disso, se você estiver

  • Enquanto estamos nisso, por que você está configurando o diretório de trabalho como /usr/local/sbin ? Este é o diretório em que o programa será executado em . Isso não precisa ser o mesmo diretório em que o programa será executado de , dado que você especificou o caminho completo. A menos que você saiba que o programa irá manipular arquivos em localizações relativas ao seu diretório de trabalho atual (a maioria dos daemons não - os diretórios de trabalho são principalmente um sopor para nós humanos insignificantes) você provavelmente não precisa configurar isso.

  • Você viu a saída de sudo launchctl list net.sshguard.sshguard ? Isso deve, no mínimo, dar a você o status de saída do sshguard, que pode ajudá-lo a descobrir por que ele está saindo.

  • O sshguard de um desses programas de fork-then-exit que lança um daemon em segundo plano retorna para o seu terminal? Em caso afirmativo, você não pode usá-lo (diretamente) com a chave KeepAlive - quando ele sai, launchd acha que foi encerrado e tenta iniciá-lo novamente, o que, dependendo de como sshguard manipula isso poderia Causar problemas. Se sshguard for fork-then-exit, e você pode descobrir como isso indica ao fork que é o daemon real (um parâmetro extra, ou um comando ligeiramente diferente, por exemplo) use isso diretamente com launchd . Se você não puder, não use a tecla KeepAlive .

  • Finalmente, tente configurar as coisas com uma GUI. Eu costumava recomendar o Lingon aqui, mas ele chegou a todos os Mac-App-Store-we-want- £ 3. Você pode ser capaz de encontrar uma das versões mais antigas ou uma alternativa chutando na internet, no entanto. Isso fará com que você não tenha digitado nada errado e permitirá que você tenha certeza de que não colocou algo no lugar errado (o que a falta de carregamento automático na reinicialização sugeriria ocorreu, embora o que você descreveu pareça correto para eu).

por 24.08.2011 / 23:12