Installation Serveur SSH sous Windows 10 avec Powershell

Présentation d’une courte procédure permettant l’installation d’un serveur SSH via Powershell dans une machine cliente Windows 10, lors de l’écriture du billet la machine Windows 10 est en version 1809. La procédure peut également être accomplie manuellement via le menu « Ajouter une Fonctionnalité Facultative ».

Utilisez un shell administrateur pour procéder à l’installation, une fois celle ci faite vous trouverez dans la liste des services Windows « OpenSSH SSH Server », passez le en automatique pour pouvoir prendre la main en SSH au boot de votre Windows.

La commande ci-dessous vous permet de rechercher les paquets correspondants, à l’écriture du billet il s’agit de la version 0.0.1.0, à l’avenir pensez à vérifier que la version n’a pas évolué

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

Pour installer le client Open SSH

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Pour installer le serveur Open SSH

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Script de déploiement avec Powershell

#Teste et installation du service openssh puis lancement
$serviceName = 'OpenSSH SSH Server'
If (Get-Service $serviceName -ErrorAction SilentlyContinue) {
    If ((Get-Service $serviceName).Status -eq 'Running') {
        Restart-Service -Name "$serviceName"
        Write-Host "Restarting $serviceName"

    } Else {
        Write-Host "$serviceName found, but it is not running."
        Start-Service -Name "$serviceName"
    }
} Else {
    Write-Host "$serviceName not found Install en cours"
    Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
}

#infos utilisateur pour connection ssh
$Password = "password"
$Utilisateur = "sshuser"
$group = "Administrateurs";


$password = ConvertTo-SecureString -String "$Password" -AsPlainText -Force

#Teste pour vérifier si l'utilisateur exist deja, si non je le cré
$op = Get-LocalUser | Where-Object {$_.Name -eq "$Utilisateur"}
if ( -not $op){
  Write-Host "$Utilisateur not found creation en cours"
  New-LocalUser "$Utilisateur" -Password $Password -FullName "$Utilisateur" -Description "System Account" | Out-Null
 }

#Teste pour vérifier si l'utilisateur est membre du groupe administrateur
$groupObj =[ADSI]"WinNT://./$group,group"
$membersObj = @($groupObj.psbase.Invoke("Members"))
$members = ($membersObj | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)})
If ($members -contains $Utilisateur) {
      Write-Host "$Utilisateur exists in the group $group"
 } Else {
      Write-Host "$Utilisateur not exists in the group $group"
      Add-LocalGroupMember -Group "Administrateurs" -Member "$Utilisateur"
}

Laisser un commentaire