Dans un article précédent, nous avons vu comment établir un tunnel SSH pour permettre une connexion VNC (Partage d’écran) sécurisée.
Malgré la simplicité des commandes utilisées, la manœuvre demande tout de même un peu de temps.
Nous allons voir ici comment automatiser tout ça grâce à un petit AppleScript.
On commence par ouvrir l’Éditeur AppleScript :
Dans l’éditeur, on colle ce script :
do shell script "ssh -A -N -L 5900:localhost:5900 user@domaine.com vncserver -geometry 1024x768 :0 &> /dev/null & echo $!" set sshpid to the result delay 2 do shell script "open vnc://localhost:5900" delay 0.5 activate display dialog "Lorsque vous avez terminé votre session VNC, cliquez sur <Reboucher le Tunnel>. SSH PID : " & sshpid buttons "Reboucher le Tunnel" default button "Reboucher le Tunnel" with icon caution do shell script "kill -9 " & sshpid tell application "Screen Sharing" quit end tell
NB : Nous nous connecterons en SSH grâce à un certificat.
do shell script "ssh -A -N -L 5900:localhost:5900 user@domaine.com <<>>
On exécute un tunnel SSH avec le port 5900 en entrée sur le client et le port 5900 en sortie sur le serveur. Ce sont les ports standards de VNC.
user
est le nom d’un utilisateur. pi
par exemple.
domain.com
est le domaine par lequel vous accédez à votre serveur ou son adresse IP.
<<>> vncserver -geometry 1024x768 :0 <<>>
On poursuit la commande avec la partie qui sera exécutée sur le client. On y démarre le serveur VNC avec une dimension d’écran de 1024×768 sur le port 0, c-à-d 5900.
<<>> &> /dev/null & echo $!
Et on envoi la réponse du serveur qui nous dit que tout s’est bien passé à la poubelle.
set sshpid to the result
Le retour du PID, c’est à dire le numéro du processus qui vient d’être démarré est stocké dans la variable sshpid
.
delay 2
On fait une petite pause de 2 sec en attendant que le processus VNC sur le serveur ait fini de booter.
do shell script "open vnc://localhost:5900"
On démarre le « Partage d’écran » (le client VNC) sur le Mac.
delay 0.5 activate display dialog "Lorsque vous avez terminé votre session VNC, cliquez sur <Reboucher le Tunnel>.
On attend une demi-seconde, le temps que « Partage d’écran » soit affiché.
Et on place la boîte de dialogue qui va permettre de tout stopper au premier plan.
SSH PID : " & sshpid buttons "Reboucher le Tunnel" default button "Reboucher le Tunnel" with icon caution
Dès que l’on va cliquer sur « Reboucher le tunnel » on va :
do shell script "kill -9 " & sshpid
Tuer le process dont on a mémorisé le numéro plus haut.
tell application "Screen Sharing" quit end tell
Quitter le « Partage d’écran ».
L’avantage d’AppleScript, c’est qu’on peut en faire une App simple à exécuter…
Fichier > (Alt) Enregistrer sous…
Format de fichier : Application
La commande ps -ax
permet de lister tous les process en cours.
La commande kill -9 <num process>
permet d’arrêter un process.
On obtient quelque chose comme ceci :
10995 ?? 0:00.05 ssh -A -N -L 5900:localhost:5900 user@domain.com vncserver -geometry 1024x768 :0
Où, ici, 10995
est le numéro du process.
Edit 04 mai 2015 :
Après quelques exécutions, le script qui semblait fonctionner correctement s’est mis à refuser de de lancer VNC côté serveur.
Tout rentre dans l’ordre en modifiant les premières lignes comme suit :
do shell script "ssh -A -N -L 5900:localhost:5900 user@domain.com &> /dev/null & echo $!" set sshpid to the result do shell script "ssh user@domain.com vncserver -geometry 1024x768 :0 &> /dev/null & echo $!" delay 2
Références :
Automating SSH Tunnels on Mac OS X
How to View and Kill Processes Using the Terminal in Mac OS X
Quit an application using applescript
AppleScript dialog tip: customizing dialog boxes