4

Я установил sshguard с помощью homebrew на моем компьютере с Mac OS X, но теперь хотел бы, чтобы sshguard запускался автоматически при запуске системы.

Я пробовал два подхода. Сначала я попытался создать папку в /Library /StartupItems с именем sshguard и создал стандартный файл StartupParameters.plist вместе с файлом сценария оболочки bash с именем sshguard. Однако, когда я перезагрузил компьютер, sshguard никогда не работал (я использовал ps -ax | grep sshguard для проверки).

Второй подход заключался в создании файла с именем net.sshguard.sshguard в /Library /LaunchDaemons / со следующим 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>

Теперь, когда я запускаю launchctl load -w /Library/LaunchDaemons/net.sshguard.sshguard.plist который появляется, чтобы установить скрипт, все в порядке, так как launchctl list показывает, что скрипт Daemon установлен. Затем я запускаю launchctl start net.sshguard.sshguard и все, кажется, работает.

Однако когда я запускаю ps -ax | grep sshguard Я вижу, что sshguard на самом деле не работает. Я тоже пытался перезагрузиться, и когда я запускаю launchctl list sshguard нет в списке.

Если я запускаю sshguard в режиме отладки SSHGUARD_DEBUG=true /usr/local/sbin/sshguard похоже, что он работает нормально.

И я проверил разрешения net.sshguard.sshguard.plist, и они совпадают с другими рабочими файлами, фактически 775.

Может кто-нибудь помочь мне посоветовать, как автоматически запустить sshguard на Mac?

Спасибо Мэтт

3 ответа3

3

Я также искал способ сделать это и выяснил, почему он не будет работать: вам нужно указать файл журнала для мониторинга (предполагается, что sshguard 1.5). Попробуй это:

<?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>
0

Я использовал этот простой и очень не очень OS-X-стильный подход для запуска демонов при загрузке для машин с OS X.

Сначала создайте скрипт, который запускает ваш демон для вас, сохраните его в /usr/local/sbin/ . Например:

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

Убедитесь, что скрипт исполняемый:

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

Проверьте, что это работает из командной строки следующим образом:

sudo /usr/local/bin/start-sshguard

А теперь поместите запись в crontab пользователя root, который запускается при перезагрузке системы:

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

Теперь он должен запускаться при загрузке системы без необходимости проходить через весь этот Launchd, чтобы это произошло.

0

Вы, кажется, не делаете ничего плохого со своим списком свойств launchd (когда вы можете заставить его работать, кстати, launchd , безусловно, является лучшим способом сделать это в Mac OS X), но вот пару вещей для проверки:

  • Имеет ли пользователь matthew необходимые разрешения для рабочего каталога (/usr/local/sbin) (по крайней мере, чтение и выполнение, возможно, запись, если что-либо выводится в рабочий каталог)? Кроме того, если вы

  • Пока мы занимаемся этим, почему вы устанавливаете рабочий каталог в /usr/local/sbin? Это каталог, программа будет работать в. Это не должен быть тот же каталог , программа будет работать с учетом того, что вы указали полный путь. Если вы не знаете, что программа будет манипулировать файлами в местах, относящихся к ее текущему рабочему каталогу (большинство демонов этого не делают - рабочие каталоги - в основном, подделка для нас, маленьких людей), вам, вероятно, не нужно устанавливать это вообще.

  • Вы смотрели на вывод sudo launchctl list net.sshguard.sshguard? Это должно, как минимум, дать вам статус выхода sshguard, который может помочь вам понять, почему он выходит.

  • Является ли sshguard одной из этих программ fork-then-exit, которая запускает демона в фоновом режиме, а затем возвращает вас в ваш терминал? Если это так, вы не можете использовать его (напрямую) с ключом KeepAlive - когда он выходит, launchd думает, что он вышел, и пытается запустить его снова, что, в зависимости от того, как sshguard обрабатывает это, может вызвать проблемы. Если sshguard - это fork-then-exit, и вы можете выяснить, как он указывает вилке, что это фактический демон (например, дополнительный параметр или немного другая команда), используйте его непосредственно с launchd . Если вы не можете, не используйте ключ KeepAlive .

  • Наконец, попробуйте настроить вещи с помощью графического интерфейса. Раньше я рекомендовал Lingon здесь, но он подходит всем Mac-App-Store-мы хотим-£ 3. Вы, возможно, сможете найти одну из старых версий или альтернативу, работающую в Интернете. Это позволит убедиться, что вы не ввели что-то неправильно, и позволит вам быть уверенным, что вы что-то не поставили в неправильное место (что может свидетельствовать отсутствие автоматической загрузки при перезагрузке, хотя то, что вы описываете, кажется правильным мне).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .