SSH-basiertes Osascript kann innerhalb eines Shell-Skripts nicht ordnungsgemäß ausgeführt werden

SSH-basiertes Osascript kann innerhalb eines Shell-Skripts nicht ordnungsgemäß ausgeführt werden

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.

verwandte Informationen