Histoire de m’éviter à lancer SSH et d’exécuter une commande précise sur mon serveur Linux, je me suis dit, tant qu’à faire, autant pour commencer, réduire la manipulation à un simple lancement de script PowerShell.

Au préalable vous devez avoir autoriser l’exécution de script sur votre ordinateur (voir mon article la dessus)

 

- Commencez par télécharger putty.exe et plink.exe

- Dirigez vous dans votre Program Files (X86) (pour un 64 bits et Program Files pour un 32 bits) 

- Créez un répertoire Putty et collez dedans les deux softs téléchargés précédemment.

On va commencer par tester si tout c’est bien passé :

- Ouvrez une invite de commandes (démarrer ==> Exécuter ==> cmd ==> Entrée)
- Dans votre invite de commandes collez ceci :

« c:\Program Files (x86)\Putty\plink.exe » -ssh utilisateur-linux@IP-DE-VOTRE-SERVEUR-ou-NOM-DNS-DE-VOTRE-SERVEUR -pw mot-de-passe-linux

Exemple :

J’ai un serveur Linux « SRV-LINUX », sur ce serveur je n’ai qu’un compte « root » et le mot de passe root est « passwordroot », la commande précédente ressemblera à :

« c:\Program Files (x86)\Putty\plink.exe » -ssh root@SRV-LINUX -pw passwordroot

Répondez « Y » à la question :

Store key in cache?

Maintenant si tout c’est bien passé, vous pouvez entrer vos commandes linux dans votre invite commandes.

Passons à l’étape qui vous intéresse le plus, exécuter une commande sur votre linux depuis votre script Powershell. Pour celà je ne vais pas réinventer la roue, j’ai récupéré le script POWERSHELL suivant sur le site de : Chris Towles. Pas de panique le script est téléchargeable plus bas et il est bien commenté afin de le personnaliser simplement et rapidement.

Function Invoke-SSHCommands {
Param($Hostname,$Username,$Password, $CommandArray, $PlinkAndPath, $ConnectOnceToAcceptHostKey = $true)

$Target = $Username + '@' + $Hostname
$plinkoptions = "-ssh $Target -pw $Password"

#Build ssh Commands
$CommandArray += "exit"
$remoteCommand = ""
$CommandArray | % {$remoteCommand += [string]::Format('{0}; ', $_) }

#plist prompts to accept client host key. This section will login and accept the host key then logout.
if($ConnectOnceToAcceptHostKey)
{
$PlinkCommand = [string]::Format('echo y | & "{0}" {1} exit', $PlinkAndPath, $plinkoptions )
#Write-Host $PlinkCommand
$msg = Invoke-Expression $PlinkCommand
}

#format plist command
$PlinkCommand = [string]::Format('& "{0}" {1} "{2}"', $PlinkAndPath, $plinkoptions , $remoteCommand)

#ready to run the following command
#Write-Host $PlinkCommand
$msg = Invoke-Expression $PlinkCommand
$msg
}
#Identifiants à remplacer
#Chemin du PLINK
$PlinkAndPath = "C:\Program Files (x86)\PuTTY\plink.exe"
#Nom utilisateur de votre compte linux
$Username = "root"
#Mot de passe de l'utilisateur de votre compte linux
$Password = "pa$$w0rd"
#Nom de votre serveur Linux ou IP de votre serveur Linux
$Hostname = "Linuxhost"

#Entrez les commandes que vous souhaitez exécuter

#Ne pas supprimer la commande : $Commands = @()
$Commands = @()
$Commands += "ls"
$Commands += "whoami"

Invoke-SSHCommands -User $Username -Hostname $Hostname -Password $Password -PlinkAndPath $PlinkAndPath -CommandArray $Commands



Le fichier est téléchargeable sur ce lien : Lancer-CMDS-sur-Linux-depuis-Powershell

- Pensez à remplacer les variables suivante :

$PlinkAndPath
$Username
$Password
$Hostname
$Commands

Sauvegardez & Enjoy ;)