Невозможно правильно выполнить ssh-ed osascript внутри сценария оболочки

317
TYPKRFT

Я создал скрипт ip-down в моей директории etc / ppp /. По сути, я пытаюсь убить определенные программы / серверы, когда VPN отключается, а затем отображать уведомление на другом компьютере через ssh. У меня есть настройки ключей SSH и следующая команда отлично работает в терминале, но не внутри скрипта:

ssh @ 'osascript -e "display notification \"The VPN has disconnected.\" with title \"Server\" sound name \"Pop\""' 

Все остальное в скрипте работает. Мой полный сценарий ниже:

#!/bin/sh  killall someApp1 killall someApp2 killall someApp3 killall someApp4 ssh @ 'osascript -e "display notification \"The VPN has disconnected.\" with title \"Server\" sound name \"Pop\""' vpn-connect & 

Примечание: я пытался заблокировать весь торрент-трафик на en0 (ethernet на этом устройстве) с помощью pf.conf, но когда я блокировал, он не позволил мне подключиться к моему vpn. Я не был уверен, как это позволить. Я был в состоянии разрешить ssh, https, совместное использование экрана и т. Д. Любая информация об этом тоже будет крутой.

0

1 ответ на вопрос

0
TYPKRFT

Не ответ, а обходной путь.

Контекст: у меня есть старый Macbook, который я использую как безголовый Plex-сервер. Я бы хотел, чтобы он всегда был подключен к VPN. Я также хотел бы уведомления, когда он подключается и отключается.

Я закончил тем, что создал приложение обработки событий. Затем я использовал Apple Remote Events, чтобы вызвать его и передать аргументы. После того, как аргументы переданы и обработчик событий запущен, я говорю приложению завершить работу. Это удерживает его от простоя в фоновом режиме. Наконец, я скрыл свое уведомление от дока, отредактировав список. Причина, по которой я создал приложение-обработчик, а не просто использовал Finder для отображения уведомлений, заключается в том, что я хотел иметь настраиваемый значок для своего уведомления.

Код для помощника по уведомлениям (обработчик событий):

on run idle end run  on idle argv try eHandler(item 1 of argv, item 2 of argv, item 3 of argv) end try end idle  on eHandler(message, title, soundName) set theMessage to message as string set theTitle to title as string set theSoundName to the soundName as string display notification theMessage with title theTitle sound name theSoundName end eHandler 

скрипт ip-down:

#!/bin/sh  # kill applications  killall someApp1  killall someApp2 killall someApp3  killall someApp4  # Open Notification Helper osascript <<EOF set remoteMachine to "eppc://:@" tell application "Finder" of machine remoteMachine open ("/Applications/Notification Helper.app" as POSIX file) end tell EOF  # Sends Notification Helper arguments osascript <<EOF tell application "Notification Helper" of machine "eppc://:@" TestHandler("The VPN has been disconnected.", "Media Server", "Pop") quit end tell EOF  # Calls applescript which reconnects my VPN.  # The & Stops script from waiting to end vpn-connect & 

Для тех, кто не знает, ip-down скрипт попадает в каталог / etc / ppp / и запускается при отключении VPN. Вы также можете создать скрипт ip-up, который запускается при подключении к VPN. Мой ip-up просто включает все мои сервисы и затем отправляет мне уведомление, сообщающее мне, что VPN является резервной копией.

Комментарии, предложения приветствуются. Все еще интересно понять, почему это будет работать, поскольку у меня есть другой скрипт, который уведомляет меня, когда x происходит из другой программы через ssh. Также все еще очень заинтересован в pf.conf. Синтаксис для меня очень сбивает с толку.