Mes passions, le boulots, mes coups de gueule...




OS X : AppleScript pour automatiser la création d’un tunnel SSH pour VNC

Catégories : Geek, Informatique, Mac, Raspberry Pi · par 2 Mai 2015

Introduction

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.

Le script

Dans l’éditeur

On commence par ouvrir l’Éditeur AppleScript :

Auto-SSH-VNC-01

Dans l’éditeur, on colle ce script :

Auto-SSH-VNC-02

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

Explications

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 ».

En faire une App

L’avantage d’AppleScript, c’est qu’on peut en faire une App simple à exécuter…

Auto-SSH-VNC-03

Fichier > (Alt) Enregistrer sous…

Format de fichier : Application

Vérifications dans le Terminal

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.

Télécharger le script

Télécharger le script

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

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.