Schlagwort-Archive: PowerShell Framework

PowerShell ist ein plattformübergreifendes Framework und Skriptsprache von Microsoft zur Automatisierung, Konfiguration und Verwaltung von Systemen.

OpenSSH für SSH unter Windows

OpenSSH ist die führende Remote-Anmeldung über SSH Protokoll in Linux, nun auch für Windows.

OpenSSH verschlüsselt den Datenverkehr, darüber hinaus bietet OpenSSH eine große Auswahl an sicheren Tunneling-Funktionen, mehrere Authentifizierungsmethoden und anspruchsvolle Konfigurationsoptionen.

Für die SSH Remoteverwaltung in heterogenen Netzwerken, haben Windows und Linux nicht viel gemeinsames. Unter Unix/Linux ist der Remote-Zugriff per OpenSSH ein Standard für Datentransfer, Remote-Terminal sowie Port-Forwarding für Remote-X. Unter Windows ist ein wirklicher SSH Standard mit OpenSSH noch nicht erreicht, neben WinRM, PowerShell-Remote, RDS und RSAT gibt es einige mehr. Hinzugekommen ist nun auch ein Port des freien OpenSSH Client/Server Tools, dies ermöglicht weitere Integration und Verwaltung von Windows und Linux Umgebungen.

OpenSSH Installation in Windows PowerShell

Als erstes öffnen wir PowerShell als Administrator. Klicke hierzu auf Start und gib powershell ein. Wenn der Eintrag zu sehen ist, klicke auf Als Administrator ausführen und dann auf Ja. Bevor wir die Installation durchführen, müssen wir herausfinden, welche Versionen der Software verfügbar sind, was mit dem folgenden Befehl erledigt werden kann.

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

Erscheint die Ausgabe: State : NotPresent

Installiere zunächst den OpenSSH-Client mit.

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

Falls gewünscht, installiere als nächstes den OpenSSH-Server.

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

Sowohl der SSH Client als auch SSH Server sollten Installiert sein. Als nächstes müssen wir den OpenSSH-Server mit dem Befehl starten.

Start-Service sshd

Jetzt müssen wir nur noch den OpenSSH-Server so einstellen, dass er beim Booten startet.

Set-Service -Name sshd -StartupType 'Automatic'

OpenSSH auf Github

Die OpenSSH Suite ist auf Github verfügbar und besteht aktuell aus folgenden Tools:

  • Remote-Operationen werden mit ssh, scp und sftp durchgeführt
  • Key Management mit ssh-add, ssh-keygen
  • Die Service-Seite besteht aus sshd, sftp-server und ssh-agent

Win32 OpenSSH Windows Installation

Nach dem Download das Zip-Archive in C:\Program Files\OpenSSH entpacken.

Starte PowerShell als Administrator und wechsle in den Pfad C:\Program Files\OpenSSH und führe folgende Aktion aus.

cd "C:\Program Files\OpenSSH"
powershell -executionpolicy bypass -file install-sshd.ps1

Die SSH Host-Schlüssel generieren mit allen Schlüssel die sshd für Key-auth erwartet.

.\ssh-keygen.exe -A

Die Firewall auf Windows Server für SSH erweitern.

New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH

Bei der Windows Workstation werden eingehende SSH Verbindungen wie folgt erlaubt.

netsh advfirewall firewall add rule name='SSH Port' dir=in action=allow protocol=TCP localport=22

Der SSH-Agent hält den privaten Schlüssel im Arbeitsspeicher.

Start-Service ssh-agent

SSH Verbinden mit Windows

Nun können SSH Verbinden aufgebaut werden.

./ssh user@10.10.10.10
./ssh -i privkey.pem user@10.10.10.10
./scp file user@10.10.10.10:/tmp

Den SSH Daemon Auto-start (Boot) aktivieren.

Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic

Ein Schlüsselpar wird wie folgt generiert.

PS C:\Program Files\OpenSSH> ssh-keygen -t rsa -b 4096 -C "user@mydomain.com"
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\user/.ssh/id_rsa): user
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in user.
Your public key has been saved in user.pub.
The key fingerprint is:
SHA256:lbPo7eEQFzaS3GFBImQG/X4H963KEOwrc3xPWeBj2Wc user@mydomain.com
The key's randomart image is:
+---[RSA 4096]----+
|    .+= ..=.     |
|     o.o = o     |
|       .+ O   .  |
|        .*.=.. + |
|       .S =o .=.E|
|       ..=.....=o|
|        oo=.  o. |
|        o+o=...  |
|         ++.oo.  |
+----[SHA256]-----+

PowerShell Loop Hands-On

Beim programmieren kommen oft Arrays und Schlaufen-(Loops) zur Anwendung, so auch beim arbeiten mit PowerShell Scripts. In folgendem Beispiel werden 4 Array Werte angelegt, diese mittels der ID wieder aufgerufen werden.

Ein Array erstellt man mit folgendem Befehl:
PS C:\>
$array = @("sandwich","salad","beer","espresso")
Write-Host $array[0,1,2,3]
Mit For-Schleife Array Werte ausgeben:

Die Länge des Arrays, bzw. die Anzahl der gespeicherten Werte, wird mit $array.length ausgelesen. Die Variable ($i) dient als Zähler, um zu Zählen wann die Schleife verlassen werden soll. Dem Zähler wird ein Startwert zugewiesen ($i=0). Der Startwert soll bei jedem Durchlauf der Schleife um 1 erhöhen ($i++) bis der Endwert erreicht ist. Der Endwert ist die Länge des Array ($array.length). Bei der Überprüfung des Endwert gibt es eine Bedingung: solange $i kleiner der Anzahl der Werte ($i -lt $array.length) ist.

For loop
for ($i=0; $i -lt $array.length; $i++){
  Write-Host $array[$i] 
}

Die For-Schleife: for ($i=0; $i -lt $array.length; $i++)
Startwert $i=0: Die Variable $i startet mit dem Wert 0
ist $i kleiner (-lt) $i -lt $array.length Bedingung: die For Schleife wird solange ausgeführt, solange diese Bedingung erfüllt ist: solange die Variable $i kleiner als $array.length ist, solange also $i kleiner 4 ist. Die Aktion beim Durchlauf der Schleife: $i++ bedeutet, den Wert der Variable $i um 1 erhöhen, bei jedem Durchlauf der Schleife wird $i um 1 grösser: 0 .. 1 .. 2 .. 3 …

while loop
$i=0
while ($i -lt $array.length){
  Write-Host $array[$i] 
  $i++
}

Beispiel mit Startwert $i vor der Schleife definiert ($i=0)
while ($i -lt $array.length){
Innerhalb von while steht die Bedingung für den Durchlauf der Schleife, der Loop wid nicht verlassen, solange diese erfüllt ist:
$i -lt $array.length … solange $i kleiner $array.length ist
Die Variable $i wird innerhalb der Schleife jeweils um den Wert 1 erhöht: $i++

Endless Loop

while kann für eine Endlosschleife wie folgt verwendet werden: mit break kann die Endlosschleife wieder verlassen werden. Folgendes Beispiel durchläuft die Schleife bis break ausgeführt wird, dies geschieht wenn $i nicht mehr kleiner dem Wert 10 ist:

$i=0
while($true) {
  $i++
  write-host $i
  if ($i -ge 10) {break}
}
do loop
$i=0
do{
  Write-Host $array[$i] 
  $i++
} while ($i -lt $array.length)
foreach
foreach ($i in $array){
  Write-Host $i 
}

foreach ($i in $array)  Aufruf aller Werte des Array ($array). Die Variable $i enthält bei jedem Durchlauf den aktuell ausgelesenen Wert.

Operators Variations:

-gt greater than
-igt greater than, case-insensitive
-cgt greater than, case-sensitive
-ge greater than or equal
-ige greater than or equal, case-insensitive
-cge greater than or equal, case-sensitive
-lt less than
-ilt less than, case-insensitive
-clt less than, case-sensitive
-le less than or equal
-ile less than or equal, case-insensitive
-cle less than or equal, case-sensitive