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 !