Não é possível executar o osascript ssh-ed corretamente dentro do shell script

Não é possível executar o osascript ssh-ed corretamente dentro do shell script

Eu criei um script ip-down no meu diretório etc/ppp/. Essencialmente, estou tentando encerrar determinados programas/servidores quando a VPN é desconectada e, em seguida, exibir uma notificação em outro computador via ssh. Configurei chaves ssh e o seguinte comando funciona bem no terminal, mas não dentro do script:

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

Todo o resto no script funciona. Meu script completo abaixo:

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

Nota lateral: eu estava tentando bloquear todo o tráfego de torrent em en0 (ethernet neste dispositivo) com pf.conf, mas quando eu bloqueava, ele não me permitia conectar ao meu VPN. Eu não tinha certeza de como permitir isso. Consegui permitir ssh, https, compartilhamento de tela, etc. Qualquer informação sobre isso também seria legal.

Responder1

Não é uma resposta, mas uma solução alternativa.

Contexto: tenho um Macbook antigo que uso como servidor Plex sem cabeça. Eu gostaria de mantê-lo conectado à VPN quase sempre. Também gostaria de receber notificações quando ele conectar e desconectar.

Acabei criando um aplicativo de manipulação de eventos. Então usei o Apple Remote Events para chamá-lo e passar argumentos. Depois que os argumentos são passados ​​e o manipulador de eventos é executado, digo ao aplicativo para encerrar. Isso evita que ele fique ocioso em segundo plano. Por último, escondi minha notificação do dock editando o arquivo plist. A razão pela qual criei um aplicativo manipulador em vez de apenas usar o Finder para exibir a notificação é porque queria ter um ícone personalizado para minha notificação.

Código para o auxiliar de notificação (manipulador de eventos):

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

Script de shell ip-down:

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

Para quem não sabe, um script ip-down entra no diretório /etc/ppp/ e é executado quando a VPN é desconectada. Você também pode criar um script ip-up, que é executado quando você se conecta à VPN. Meu ip-up apenas ativa todos os meus serviços e me envia uma notificação informando que a VPN está com backup.

Comentários, sugestões são apreciados. Ainda estou interessado em entender por que isso funcionaria, pois tenho outro script que me avisa quando x acontece de outro programa via ssh. Também ainda estou muito interessado em pf.conf. A sintaxe disso é muito confusa para mim.

informação relacionada