it-swarm.com.de

Einrichten von OpenSSH für Windows mithilfe der Authentifizierung mit öffentlichem Schlüssel

Ich habe Probleme beim Einrichten von OpenSSH für Windows mithilfe der Authentifizierung mit öffentlichem Schlüssel.

Ich habe dies auf meinem lokalen Desktop und kann mit einem Schlüssel von Unix-Rechnern oder anderen OpenSSH für Windows-Rechnern ssh.

Ich habe den Build auf einen Server repliziert. Die Kennwortauthentifizierung funktioniert einwandfrei. Wenn ich die Schlüssel verwende, tritt jedoch das folgende Problem auf:

debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /cygdrive/c/sshusers/jsadmint2232/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Connection closed by 127.0.0.1

Zum Testen habe ich nur versucht, SSH an localhost zu senden, aber selbst wenn ich es aus der Ferne versuche, erhalte ich das gleiche Problem.

Noch seltsamer ist, dass, wenn ich in sshd_config sowohl das Passwort als auch den öffentlichen Schlüssel aktiviert habe, nur versucht wird, Schlüssel zu verwenden und dann mit der obigen Meldung bombardiert wird und nicht einmal versucht wird, das Passwort zu verwenden.

Hier sind die Schritte, die ich unternommen habe:

  1. Installieren Sie OpenSSH für Windows
  2. mkgroup -l >> ..\etc\group (lokale Gruppen hinzugefügt)
  3. mkgroup -d >> ..\etc\group (hinzugefügte Domänengruppen)
  4. mkpasswd -L -u openssh >> ..\passwd (fügte meinen lokalen Benutzer hinzu)
  5. mkpasswd -D -u jsadmint2232 >> ..\passwd (hat meinen Domain-Benutzer hinzugefügt)
  6. Das Homedir in passwd wurde so bearbeitet, dass es auf c:\sshusers \% USER% zeigt, wobei% USER% der Benutzername ist
  7. Aktivierte Passwortauthentifizierung, deaktivierte Schlüsselauthentifizierung
  8. Erstellt ssh-Schlüssel für beide jsadmint2232/openssh und stellt sicher, dass die Dateien in homedirs erstellt wurden
  9. Es wurden authorised_keys-Dateien zu den .ssh-Verzeichnissen für jeden Benutzer hinzugefügt und Schlüssel für eingehende Verbindungsbenutzer hinzugefügt
  10. net stop opensshd/net start opensshd
  11. Test Password auth funktioniert sowohl lokal als auch remote
  12. Aktualisierte sshd_config, um Auth-Neustart von opensshd zu ermöglichen
  13. Verbindung testen und obigen Fehler bekommen, auch nicht mal Passwortauth probieren?
  14. Sshd_config aktualisiert, um die Kennwortauthentifizierung vollständig zu deaktivieren - opensshd neu starten
  15. Verbindung testen und trotzdem über Fehler kommen

Es scheint, dass der Server die Verbindung aus irgendeinem Grund beendet?

11
Cambolie

Ich habe das Problem gelöst ...

Dies hängt mit dem Konto zusammen, mit dem der Dienst gestartet wurde - es wurde das lokale Systemkonto verwendet -, wodurch der Zugriff auf den Pub-Schlüssel und die Datei "authorized_keys" gestoppt wurde.

Sobald ich den Dienst beendet und als der Benutzer gestartet habe, mit dem ich mich verbinden wollte, hat es funktioniert!

Sie müssen also grundsätzlich mit einem Dienstkonto beginnen und dann externe Benutzer als dieser Benutzer anmelden.

4
Cambolie

Im Folgenden werden die Installationsschritte für OpenSSH beschrieben, die mit Windows 10 v.1803 (Update April 2018) ausgeliefert werden. Siehe Kommentare zu diesem Beitrag, möglicherweise funktioniert es nicht mit 1809.

Serverkonfiguration (PowerShell mit erhöhten Rechten):

  1. Installieren Sie den OpenSSH-Server: Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0.

  2. Starten Sie die Dienste agent und sshd: Start-Service ssh-agent; Start-Service sshd (dies generiert automatisch die Host-Schlüssel und die Standardkonfiguration in $env:ProgramData\ssh).

  3. [Optional] Installieren Sie das OpenSSHUtils-Powershell-Modul: Install-Module -Force OpenSSHUtils

Client-Setup (nicht erhöhte Powershell):

  1. Generieren Sie den Benutzerschlüssel: cd $env:USERPROFILE\.ssh; ssh-keygen.exe, befolgen Sie die Anweisungen und stimmen Sie dem vorgeschlagenen Standardspeicherort für Dateien zu. Dadurch werden 2 Dateien erstellt: id_rsa und id_rsa.pub;

  2. [Optional] Fügen Sie dem Authentifizierungsagenten einen Schlüssel hinzu, damit Sie das Kennwort nicht jedes Mal eingeben müssen, wenn Sie es verwenden: ssh-add .\id_rsa (oder welche Datei auch immer generiert wurde);

Server-Setup fortgesetzt (nicht erhöhte Powershell):

  1. Melden Sie sich als Benutzer an, für den der öffentliche Schlüssel verwendet werden soll
  2. cd $env:USERPROFILE; mkdir .ssh; cd .ssh; New-Item authorized_keys;
  3. Fügen Sie den Inhalt der id_rsa.pub-Datei vom Client in die .ssh\authorized_keys-Datei aus dem vorherigen Schritt ein.
  4. Richten Sie die Berechtigungen richtig ein (wichtig !!!):
    1. Führen Sie start . aus, um den Explorer mit dem aktuellen Ordner ($env:USERPROFILE\.ssh) zu öffnen.
    2. Rechtsklicke authorized_keys, gehe zu Properties -> Security -> Advanced
    3. Klicken Sie auf "Vererbung deaktivieren".
    4. Wählen Sie "Geerbte Berechtigungen in explizite Berechtigungen für dieses Objekt konvertieren", wenn Sie dazu aufgefordert werden.
    5. (wirklich, wirklich wichtig) Entfernen Sie alle Dateiberechtigungen mit Ausnahme der SYSTEM und Ihrer eigenen. Die Datei muss genau zwei Berechtigungseinträge enthalten. Einige Anleitungen schlagen vor, den Repair-AuthorizedKeyPermission $env:USERPROFILE\.ssh\authorized_keys auszuführen - dies wird versuchen, den Benutzer sshd zur Berechtigungsliste hinzuzufügen, und er wird die Authentifizierung unterbrechen. Tun Sie dies also nicht, oder stimmen Sie dem Hinzufügen des Benutzers sshd zumindest nicht zu.) . Sowohl SYSTEM als auch Sie sollten die volle Kontrolle über die Datei haben.

Klient:

  1. Führen Sie ssh <serverusername>@<serverhostname> aus. An diesem Punkt sollte es funktionieren.

Versuchte das mit Windows 10 als Server und sowohl sich selbst als auch einem Debian Linux als Client.

BEARBEITEN: (siehe Kommentarbereich unten) Aktuelle Windows-Builds müssen auch die folgenden in auskommentieren

PS C:\ProgramData\ssh> bash -c 'vim sshd_config'

# Match Group administrators                                                    
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys  
22
n0rd

Wenn Sie die OpenSSH-Version von mls-software.com verwenden, finden Sie hier einen weiteren Hinweis.

Wenn Sie die Installation unter Verwendung des SSHD_SERVER-Kontos und der Berechtigungstrennung durchführen, können Sie die Authentifizierung mit öffentlichem Schlüssel verwenden (per http://www.mls-software.com/opensshd-pki.html ). Wenn jedoch die Benutzerkontensteuerung aktiviert ist, ist die Installation nicht erfolgreich. Die Benutzer werden nicht ordnungsgemäß erstellt, und der Dienst wird nicht erstellt. Es ist sehr schwierig, diese Gegenstände nachträglich manuell aufzurichten. Durch einfaches Deaktivieren der Benutzerkontensteuerung vor der Installation können die Benutzer und der Dienst während des Installationsvorgangs ordnungsgemäß erstellt werden. Nach der Installation können Sie die Benutzerkontensteuerung wieder aktivieren.

Beim manuellen Erstellen des SSHD_SERVER-Kontos war die Authentifizierung erfolgreich, wenn die Kennwortauthentifizierung verwendet wurde, der Client jedoch die Verbindung mit "/ bin/bash: Vorgang nicht zulässig" beendete. Die Authentifizierung mit öffentlichen Schlüsseln wurde vom Server geschlossen (ursprünglicher Fehler von Cambolie).

3
Dustin

Ich habe es gelöst durch:

  1. Installation im Privilegientrennungsmodus SSHD_SERVER +. Ich habe auch die Berechtigungstrennung in der Konfiguration manuell auf "yes" gesetzt. Das hat bei mir lange nicht geklappt, der User wurde nicht angelegt. Dann hat es geklappt, ich weiß nicht warum. Ich habe in der Systemsteuerung nur Benutzerkonten aufgerufen, um zu überprüfen, ob die Benutzerkontensteuerung deaktiviert ist. Ich hatte auch/var/empty mit vollem Zugriff für alle.
  2. Für C:\openssh\var\empty habe ich die Berechtigungen "attributes get/set" für "Everyone" und "myself" und "full" für ".\Sshd_server" festgelegt. Ich habe es auch zum Besitzer gemacht.
1
Mikhail Orlov