
Ich habe ein IP-Down-Skript in meinem Verzeichnis etc/ppp/ erstellt. Im Wesentlichen versuche ich, bestimmte Programme/Server zu beenden, wenn die VPN-Verbindung getrennt wird, und dann eine Benachrichtigung auf einem anderen Computer über SSH anzuzeigen. Ich habe SSH-Schlüssel eingerichtet und der folgende Befehl funktioniert im Terminal einwandfrei, aber nicht im Skript:
ssh {userName}@{address} 'osascript -e "display notification \"The VPN has disconnected.\" with title \"Server\" sound name \"Pop\""'
Alles andere im Skript funktioniert. Mein vollständiges Skript unten:
#!/bin/sh
killall someApp1
killall someApp2
killall someApp3
killall someApp4
ssh {userName}@{address} 'osascript -e "display notification \"The VPN has disconnected.\" with title \"Server\" sound name \"Pop\""'
vpn-connect &
Randbemerkung: Ich habe versucht, den gesamten Torrent-Verkehr auf en0 (Ethernet auf diesem Gerät) mit pf.conf zu blockieren, aber als ich ihn blockierte, konnte ich keine Verbindung zu meinem VPN herstellen. Ich war mir nicht sicher, wie ich das zulassen konnte. Ich konnte SSH, HTTPS, Bildschirmfreigabe usw. zulassen. Alle Informationen dazu wären auch cool.
Antwort1
Keine Antwort, sondern ein Workaround.
Kontext: Ich habe ein älteres Macbook, das ich als Headless-Plex-Server verwende. Ich möchte es so gut wie immer mit dem VPN verbunden halten. Außerdem möchte ich Benachrichtigungen erhalten, wenn die Verbindung hergestellt oder getrennt wird.
Am Ende habe ich eine App zur Ereignisbehandlung erstellt. Dann habe ich Apple Remote Events verwendet, um sie aufzurufen und Argumente zu übergeben. Nachdem die Argumente übergeben und der Ereignishandler ausgeführt wurden, weise ich die Anwendung an, zu beenden. Dadurch wird verhindert, dass sie einfach im Hintergrund herumliegt. Schließlich habe ich meine Benachrichtigung aus dem Dock ausgeblendet, indem ich die plist bearbeitet habe. Der Grund, warum ich eine Handler-App erstellt habe, anstatt einfach Finder zum Anzeigen der Benachrichtigung zu verwenden, ist, dass ich ein benutzerdefiniertes Symbol für meine Benachrichtigung haben wollte.
Code für den Benachrichtigungs-Helfer (Event-Handler):
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-Shell-Skript:
#!/bin/sh
# kill applications
killall someApp1
killall someApp2
killall someApp3
killall someApp4
# Open Notification Helper
osascript <<EOF
set remoteMachine to "eppc://{userName}:{password}@{address}"
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://{userName}:{password}@{address}"
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 &
Für diejenigen, die es nicht wissen: Ein IP-Down-Skript wird in Ihr /etc/ppp/-Verzeichnis geschrieben und ausgeführt, wenn die VPN-Verbindung getrennt wird. Sie können auch ein IP-Up-Skript erstellen, das ausgeführt wird, wenn Sie eine Verbindung zu Ihrem VPN herstellen. Mein IP-Up schaltet einfach alle meine Dienste ein und sendet mir dann eine Benachrichtigung, die mich darüber informiert, dass das VPN gesichert ist.
Kommentare und Vorschläge sind willkommen. Ich bin immer noch daran interessiert zu verstehen, warum das funktionieren würde, da ich ein anderes Skript habe, das mich benachrichtigt, wenn x von einem anderen Programm über SSH passiert. Ich bin auch immer noch sehr an pf.conf interessiert. Die Syntax dafür ist für mich sehr verwirrend.