Posh-SSH : Connexion SSH depuis PowerShell sous Windows

Posh-SSH : Connexion SSH depuis PowerShell sous Windows

I. Présentation

Le module Posh-SSH pour PowerShell permet de se connecter en SSH sur une machine Linux/Unix pour exécuter des commandes et transférer des fichiers via SCP/SFTP. Une vingtaine de commandes sont présentes dans ce module. Ne vous emballez pas, ce module ne permettra de remplacer Putty (ou autre), car on ne se retrouve pas dans un véritable Shell interactif.

Par ailleurs, vous pourrez établir de multiples connexions vers des hôtes via SSH, et invoquer des commandes et en obtenir la sortie. Ainsi, ce module s’avère surtout intéressant pour automatiser des tâches sur des hôtes Linux, il pourrait remplacer Putty mais comme il faut invoquer les commandes tour à tour, ce n’est pas pratique.

Ce module supporte d’autres actions comme les connexions SFTP et SCP. Nous verrons la liste complète des modules toute à l’heure.

II. Qu’est-ce que Posh-SSH ?

Le module Posh-SSH est développé pour PowerShell v2.0 et les versions supérieures. Il permet de se connecter en SSH sur différents hôtes et d’invoquer (exécuter) des commandes sur l’hôte et obtenir le résultat en retour. D’autres fonctionnalités sont incluses :

  • Utilisation de clés SSH pour l’authentification
  • Envoyer et télécharger des fichiers via SCP et SFTP
  • Support des proxy HTTP
  • Gestion des connexions établies

Son code est une réadaptation du framework SSH.NET, et requiert pour fonctionner le .NET Framework 4.0. Il ne supporte pas toutes possibilités offertes par le SSH et référencées dans la RFC, mais il supporte des fonctionnalités intéressantes, et il est amené à être amélioré…

La page du projet : GitHub Posh-SSH

Sur le site PowerShell Gallery : Module Posh-SSH

III. Installation de Posh-SSH

Pour installer le module Posh-SSH sur votre machine, il suffit d’utiliser la commande fournit sur le GitHub de l’outil, à savoir :

Install-Module -Name Posh-SSH

Cette commande déclenchera le téléchargement du module et l’installation du module.

En cas de problème lors de l’installation…

Si vous obtenez l’erreur « Import-Module : Le module « posh-ssh » spécifié n’a pas été chargé, car aucun fichier de module valide n’a été trouvé dans un répertoire de module« , c’est que le répertoire où est installé le module ne correspond pas au répertoire où votre système vérifie la présence des modules.

En fait, l’installation ira systématiquement positionner le module dans le répertoire :

C:\Users\votre-utilisateur\Documents\WindowsPowerShell\Modules

Sauf que, si comme moi votre profil utilisateur est déporté vers une autre partition, vous obtiendrez cette erreur. Pour corriger le problème, il suffit de copier le dossier « Posh-SSH » du module vers le répertoire « Modules » correspondant réellement à votre profil (et qui est vérifié par PowerShell lors d’un Import-Module).

Pour savoir où PowerShell vérifie la présence d’un module lors d’un « Import-Module« , saisissez la commande suivante :

$env:PSModulePath
Exemple de sortie de $env:PSModulePath

IV. Les commandes de Posh-SSH

Pour lister les commandes intégrées au module Posh-SSH, ouvrez une console PowerShell et saisissez :

Get-Command -Module Posh-SSH

On obtiendra en sortie :

Commandes disponibles dans le module Posh-SSH
Commandes disponibles dans le module Posh-SSH

Pour obtenir de l’aide quant à l’utilisation d’une de ces commandes, faite comme ceci :

help New-SSHSession

Par exemple, pour le SFTP, on trouve quatre commandlets dédiés à cette utilisation :

Get-SFTPFile : Télécharger un fichier en SFTP.
Move-SFTPFile : Déplacer ou renommer un fichier distant en SFTP
Remove-SFTPFile : Supprimer un fichier distant en SFTP
Set-SFTPFile : Envoyer un fichier sur l’hôte distant en SFTP.

V. Créer et gérer les connexions SSH

Passons maintenant à l’utilisation du module, tout d’abord, pensez à l’importer grâce à la commande suivante :

Import-Module Posh-SSH

Pour créer une connexion SSH, on s’appuiera sur la commande « New-SSHSession » comme ceci :

New-SSHSession -ComputerName "" -Port

Lorsque vous exécuterez cette commande, une fenêtre apparaîtra pour saisir vos identifiants de connexion sur le serveur distant, comme ceci :

Connexion SSH depuis Windows avec Posh-SSH
Connexion SSH depuis Windows avec Posh-SSH

Une fois la connexion établie, vous devez accepter le « fingerprint » du serveur SSH, ce qui est normal puisqu’il s’agit de la première connexion à destination de cet hôte. Indiquez « Y » pour accepter.

Connexion établie avec Posh-SSH
Connexion établie avec Posh-SSH

Sur la copie d’écran ci-dessus, on remarque la présence d’un champ « Index« . En effet, chaque connexion SSH se verra attribuer un numéro d’index, qu’il faudra spécifier lors des différentes actions pour bien cibler la connexion (invoquer une commande, supprimer une connexion, etc.).

Pour lister toutes les connexions, exécutez la commande suivante :

Get-SSHSession

Note : Lorsque vous aurez établi une connexion SSH à destination d’un hôte, une entrée est générée dans le registre au sein de « HKEY_CURRENT_USER\Software\PoshSSH« . Elle contient l’adresse IP de l’hôte et la valeur du fingerprint.

Pour supprimer une connexion SSH (déconnexion de l’hôte distant), on utilisera la commande suivante :

Remove-SSHSession -Index  -Verbose
Déconnexion d'un hôte SSH via Posh-SSH
Déconnexion d’un hôte SSH via Posh-SSH

La sortie ci-dessus montre la déconnexion d’un hôte, et on peut être sûr que la déconnexion est réussie, car la commande « Get-SSHSession » ne retourne pas la connexion.

J’espère que vous n’avez pas fermé la session SSH, sinon reconnectez l’hôte afin de pouvoir suivre la prochaine partie.

VI. Invoquer une commande

Pour exécuter une commande sur l’hôte distant via SSH, on utilisera tout simplement le commandlet « Invoke-SSHCommand« . Il faudra penser à préciser l’index de connexion cible, par exemple, dans ce cas l’index de la connexion est « 0« .

Le paramètre « Command » quant à lui permettra d’indiquer la commande à exécuter sur l’hôte Linux. En retour, le résultat de la commande sera retourné dans l’Output.

Voici un exemple et la copie d’écran correspondante :

Invoke-SSHCommand -Index 0 -Command "uname -a"
Exécuter une commande avec Posh-SSH
Exécuter une commande avec Posh-SSH

Comme je suis sympa avec vous, ci-dessous, vous trouverez différentes commandes et les sorties obtenues. Pour info, je me connecte sur l’adresse IP de boucle locale 127.0.0.1:22, car j’utilise une machine virtuelle en NAT et je redirige le flux vers cette machine virtuelle. Cette VM étant sous Debian 8 (Jessie).

PS C:\> New-SSHSession -ComputerName "127.0.0.1" -Port 22

applet de commande New-SSHSession à la position 1 du pipeline de la commande
Fournissez des valeurs pour les paramètres suivants :
Credential

Server SSH Fingerprint
Do you want to trust the fingerprint 54:f5:f9:b4:d:d0:a6:7a:4:93:6b:d2:54:33:9a:2b
() Y  () N  (?) Aide (la valeur par défaut est « N ») : Y

Index Host                                                        Connected
----- ----                                                        ---------
  0   127.0.0.1                                                      True


PS C:\> Invoke-SSHCommand -Index 0 -Command "pwd"

Host       : 127.0.0.1
Output     : /root
ExitStatus : 0

PS C:\> Invoke-SSHCommand -Index 0 -Command "cd /var/log"

Host       : 127.0.0.1
Output     :
ExitStatus : 0

PS C:\> Invoke-SSHCommand -Index 0 -Command "uname -a"

Host       : 127.0.0.1
Output     : Linux JESSIE-01 3.16-2-amd64 #1 SMP Debian 3.16.3-2 (2014-09-20) x86_64 GNU/Linux
ExitStatus : 0

PS C:\> Invoke-SSHCommand -Index 0 -Command "whoami"

Host       : 127.0.0.1
Output     : root
ExitStatus : 0

PS C:\> Invoke-SSHCommand -Index 0 -Command "cd /var/log; ls"

Host       : 127.0.0.1
Output     : alternatives.log
             apt
             auth.log
             btmp
             daemon.log
             debug
             dmesg
             kern.log
             lastlog

ExitStatus : 0


PS C:\> Invoke-SSHCommand -Index 0 -Command "cd /var/log; cat auth.log"

Host       : 127.0.0.1
Output     : Oct 30 16:59:44 JESSIE-01 sshd(2510): Accepted password for root from 192.168.154.2 port 57708 ssh2
             Oct 30 16:59:44 JESSIE-01 sshd(2510): pam_unix(sshd:session): session opened for user root by (uid=0)
             Oct 30 17:01:47 JESSIE-01 sshd(2521): Connection closed by 192.168.154.2 (preauth)
             Oct 30 17:02:07 JESSIE-01 sshd(2523): Accepted password for root from 192.168.154.2 port 57745 ssh2
             Oct 30 17:02:07 JESSIE-01 sshd(2523): pam_unix(sshd:session): session opened for user root by (uid=0)
ExitStatus : 0

VII. Les hôtes de confiance

Il est possible de visualiser les hôtes de confiance avec lesquelles vous avez déjà établies une connexion grâce à la commande suivante :

Get-SSHTrustedHost
Posh-SSH - Hôtes de confiance
Posh-SSH – Hôtes de confiance

Passons maintenant au transfert de fichiers via SCP.

VIII. Transfert de fichiers via SCP

Le SCP étant fréquemment utilisé pour du transfert de fichiers, il est intéressant de s’intéresser aux commandlets qui permettent d’envoyer et de télécharger des fichiers par cette méthode.

A. Envoyer un fichier

Pour envoyer un fichier, on utilise « Set-SCPFile » avec plusieurs arguments : le chemin vers le fichier local (LocalFile), le chemin de stockage distant (RemoteFile) et la cible (ComputerName).

Voici un exemple pour illustrer mes propos :

Set-SCPFile -LocalFile "E:\Florian_Profil\Téléchargements\mvmc_setup.msi" -RemoteFile "/tmp/mvmc_setup.msi" -ComputerName "127.0.0.1"

Ce qui aura pour effet d’afficher dans la console PowerShell une barre de progression.

Posh-SSH Set-SCPFile
Posh-SSH Set-SCPFile

Voici la sortie de la commande et une seconde commande qui permet de vérifier que le fichier est bien envoyé, avec un simple « ls ».

PS C:\> Set-SCPFile -LocalFile "E:\Florian_Profil\Téléchargements\mvmc_setup.msi" -RemoteFile "/tmp/mvmc_setup.msi" -ComputerName "127.0.0.1"

applet de commande Set-SCPFile à la position 1 du pipeline de la commande
Fournissez des valeurs pour les paramètres suivants :
Credential
PS C:\> Invoke-SSHCommand -Index 0 -Command "cd /tmp; ls -l"

Host       : 127.0.0.1
Output     : total 24380
             -rw-r--r-- 1 root root 24965120 oct.  30 10:24 mvmc_setup.msi
ExitStatus : 0

Maintenant, on va s’attaquer au téléchargement d’un fichier.

B. Télécharger un fichier

Nous allons retélécharger le fichier que nous venons d’envoyer. Pour le téléchargement, le commandlet « Get-SCPFile » est utilisé avec les mêmes arguments que pour envoyer, comme ceci :

Get-SCPFile -LocalFile "E:\Florian_Profil\Téléchargements\mvmc_setup_bis.msi" -RemoteFile "/tmp/mvmc_setup.msi" -ComputerName "127.0.0.1"

On remarque la barre de progression qui indique l’avancement du téléchargement :

Posh-SSH Get-SCPFile
Posh-SSH Get-SCPFile

Ce tutoriel touche à sa fin, si vous rencontrez des problèmes dans l’utilisation de ce module, ou si vous avez des questions : utilisez notre forum ! 🙂

Hébergez votre site à partir de 2$ sur 👉👉👉 https://www.tnctech.ca

À propos Santana

Analyste en cybersécurité avec 5 ans d'expérience dans la protection des systèmes d'information contre les menaces et les attaques. Expertise dans la surveillance des réseaux, l'analyse des vulnérabilités, et la gestion des incidents de sécurité. Passionnée par l'innovation technologique et la mise en œuvre de solutions de sécurité robustes pour protéger les données sensibles et assurer la conformité réglementaire.

Vérifiez également

Comment durcir la configuration de son serveur SSH ?

Comment durcir la configuration de son serveur SSH ?

Table de Matieres1 I. Présentation2 II. Sécurisation générale de SSH2.1 A. Modifier le port et …

Linux : configuration d’un espace de stockage sécurisé avec SFTP

Linux : configuration d’un espace de stockage sécurisé avec SFTP

Table de Matieres1 I. Présentation2 II. Préparation du serveur2.1 A. Configuration du réseau2.2 B. Vérification …

Linux : comment éviter d’entrer sa passphrase à chaque utilisation d’une clé SSH ?

Linux : comment éviter d’entrer sa passphrase à chaque utilisation d’une clé SSH ?

Table de Matieres1 I. Présentation2 II. Prérequis3 III. Vérifier la présence de la clé SSH4 …

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.