Magazine Informatique

Utiliser le PowerShell pour scripter facilement une connexion SSH

Par Chezmat @chezmat

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 :

Utiliser le PowerShell pour scripter facilement une connexion SSH

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 :

Utiliser le PowerShell pour scripter facilement une connexion SSH

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

Utiliser le PowerShell pour scripter facilement une connexion SSH

Ç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 :

Utiliser le PowerShell pour scripter facilement une connexion SSH

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 :

Utiliser le PowerShell pour scripter facilement une connexion SSH

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 :

Utiliser le PowerShell pour scripter facilement une connexion SSH

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]

Retour à La Une de Logo Paperblog

A propos de l’auteur


Chezmat 117 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte