Utiliser le PowerShell pour scripter facilement une connexion SSH

Si comme moi vous avez quelques Raspberry Pi en stock chez vous, il vous arrive surement de devoir vous connecter en SSH pour lancer une commande. Mais plutôt que de le faire avec un programme spécifique, savez-vous que c’est possible de le faire directement avec le PowerShell de Windows ? On peut même faire un menu assez simplement pour vos différentes machines. Et scripter une commande à lancer directement. Alors, ça vous intéresse ?

Le PowerShell, c’est quoi ?

C’est le successeur des fichiers de commandes MS-DOS, les fameux fichiers .bat. C’est donc un interpréteur de commandes, mais aussi un langage de script. L’avantage, c’est qu’il est multiplateformes.

À partir d’un pc sous Windows, taper « PowerShell » dans la barre de recherche, puis cliquez sur ouvrir :

La syntaxe

Pour vous connecter en SSH sur une machine, il faut indiquer le nom de la machine et l’utilisateur (qui doit bien sur avoir les droits pour se connecter en SSH), sous la forme :

ssh user@nommachine

Exemple concret :

Le mot de passe vous sera demandé pour vous connecter (comme avec n’importe quelle autre application SSH).

En soi, rien de révolutionnaire par rapport à un putty. C’est vrai. Mais l’avantage, c’est que l’on peut scripter ces actions et même automatiser le lancement d’une commande distante via PowerShell.

Script PowerShell

Vérifier que vous pouvez lancer un script PowerShell

Dans une fenêtre PowerShell, tapez la commande suivante

Get-ExecutionPolicy

Si vous obtenez la réponse « restricted », vous ne pouvez pas lancer de scripts. Tapez alors la commande suivante pour pouvoir lancer votre script :

Set-ExecutionPolicy RemoteSigned

Script PowerShell de base

Vous pouvez faire ultra basique, et juste faire un fichier avec votre commande ssh. Pour cela, faire un fichier texte dans lequel vous mettrez votre commande. Reste à renommer votre fichier en .ps1 pour en faire un script Powershell. Faites ensuite un clic droit sur le fichier et choisissez l’option « Exécuter avec PowerShell ».

Ça marche, mais ça n’apporte pas grand-chose si ce n’est garder la trace du couple user/machine.

Lancer une commande distante via le script PowerShell

De temps en temps, le répertoire partagé sur mon serveur MyMedia « saute » et il ne voit plus les musiques sur mon NAS. Du coup, obligé de me connecter en SSH et de lancer la commande qui va bien. Sauf qu’à chaque fois, il faut que je retrouve la bonne syntaxe et le nom du répertoire.

J’ai testé le fait de lancer la commande à partir du script, mais cela ne fonctionne pas. Par contre, il est possible d’exécuter un script local sur le Raspberry Pi. Ca complique un peu les choses, mais ça fonctionne.

Connectez-vous en ssh sur la machine et créez un fichier de ce type (avec une extension .sh), par exemple ici « script_mount.sh » :

sudo nano script_mount.sh

Insérer votre commande dans le fichier (précédée de #!/bin/bash), faites Exit (control + X) et enregistrer le fichier :

Dans ce cas, le fichier a été créé dans le répertoire du compte MyMedia, ce qui donne le chemin suivant : /home/MyMedia/script_mount.sh.

Votre script est prêt, mais il faut encore le rendre exécutable avec ces deux commandes :

chmod +x /home/MyMedia/script_mount.sh
chmod 0755 /home/MyMedia/script_mount.sh

Il suffit juste d’indiquer le chemin de votre fichier après la commande ssh pour le lancer :

ssh MyMedia@raspberrypi /home/MyMedia/script_mount.sh

Là encore, il faudra indiquer votre mot de passe et le script va se lancer. Pas mal non ?

Créer un menu en PowerShell

Un menu permet de gérer plusieurs machines ou plusieurs scripts.

function Show-Menu {
    param (
        [string]$Title = 'Menu RaspberryPi'
    )
    Clear-Host
    Write-Host "================== $Title =================="
    
    Write-Host "Entrer '1' pour lancer la connection au serveur MyMedia."
    Write-Host "Entrer '2' pour lancer la connection SSH sur OMV."
    Write-Host "Entrer 'M' pour (re)monter le répertoire de musique pour MyMedia."
    Write-Host "Entrer 'Q' pour quitter."
    Write-Host "======================================================="
    Write-Host "                               "
}

do
 {
    Show-Menu
    $selection = Read-Host "Faites votre choix "
    switch ($selection)
    {
    '1' {
    ssh MyMedia@raspberrypi
             }
    '2' {
    ssh omvssh@omv
             }
    'M' {
    ssh MyMedia@raspberrypi /home/MyMedia/script_mount.sh
       }
    }
    pause
 }
 until ($selection -eq 'q')

La fonction « show-menu » ne fait qu’afficher à l’écran le menu. C’est ensuite la boucle avec le « do » qui permet de gérer les actions. Dans les cas 1 et 2, je ne fais que donner les infos de connexion aux machines, dans le cas M, j’utilise le script vu précédemment.

Le résultat :

Et si le coeur vous en dit, vous pouvez ajouter un titre en ascii art comme à la belle époque des fichiers bat, comme avec ce site : https://textkool.com/en/ascii-art-generator

Complétement inutile, mais tellement fun :

Voilà, assez simple et ça permet de gagner du temps quand vous avez besoin d’accéder à vos machines et / ou lancer un script.

N’hésitez pas à partager vos cas d’usage si vous avez utilisé cet article !

VN:F [1.9.22_1171]
Evaluez l'article :
Note : 0.0/5 (0 votes)

Publié par

Mat

Webmaster de Chez Mat, trentenaire passionné d'informatique et de séries. Je partage avec vous mes tutos et astuces informatiques : matériels, logiciels et aussi du wordpress! Grand fan de culture Japonaise, je parle également de mes passions sur mon autre site (Séries, Mangas, Animés, Musique et de temps en temps, un peu de cinéma et de livres!)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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