Unter Windows 8.1 stieß ich auf das server refused our keyProblem.
Befolgen
Sie die Anleitung: https://winscp.net/eng/docs/guide_windows_openssh_server Es war einfach, eine Verbindung mit dem Windows-Login usernameund herzustellen password. Bei der Authentifizierung mit usernamein Kombination mit a private keywar die Antwort jedoch server refused our key.
Um es mit einem öffentlichen Schlüssel zum Laufen zu bringen, kam es auf die Berechtigungen für die Datei an:
C:\ProgramData\ssh\administrators_authorized_keys
Dies ist eine hilfreiche Seite: https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooter-Steps
Stoppen Sie die beiden OpenSSH-Dienste und öffnen Sie einen command promptmit admin permissions. Dann renne:
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
Hinweis: Geben Sie den vollständigen Pfad zur Exe an, andernfalls sshdbeschweren Sie sich. Dadurch wird ein Verbindungslistener für die einmalige Verwendung erstellt. Das-ddd ist ausführliche Stufe 3.
Nach dem Herstellen einer Verbindung ergab das Scannen der Protokolle Folgendes:
debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
debug3: Failed to open file:C:/ProgramData/ssh/administrators_authorized_keys error:2
debug1: Could not open authorized keys '__PROGRAMDATA__/ssh/administrators_authorized_keys':
No such file or directory
Musste die Datei erstellen: C:\ProgramData\ssh\administrators_authorized_keys
Und kopiere den public keyText hinein, zB: ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
Und dann speichere die Datei. Ich habe die Datei wie UTF-8beim gespeichert BOM. Nicht getestet ANSI.
Führen Sie dann die einmalige Befehlszeile erneut aus. In den Protokollen wird Folgendes angezeigt:
debug1: trying public key file __PROGRAMDATA__/ssh/administrators_authorized_keys
debug3: Bad permissions. Try removing permissions for user: S-1-5-11 on file C:/ProgramData/ssh/administrators_authorized_keys.
Authentication refused.
S-1-5-11ist der Name, der dem gegeben wird System.
Um das zu beheben Bad permissions, klicken Sie mit der rechten Maustaste auf die administrators_authorized_keysDatei, gehen Sie zu Security Tab, klicken Sie auf die AdvancedSchaltfläche und entfernen Sie geerbte Berechtigungen. Löschen Sie dann alle Group or user names:außer dem Windows-Login-Benutzernamen, z. B.: YourMachineName\username
Die Berechtigungen dafür usernamesollten lauten Read Allow, Write Denyalles andere ist deaktiviert. Der Besitzer der Datei sollte auch seinYourMachineName\username
Dies hat das Problem behoben.
Andere nützliche Links:
Laden Sie OpenSSH-Win32.zip von folgender Adresse herunter: https://github.com/PowerShell/Win32-OpenSSH/releases
C # -Beispiel für die Verwendung der WinSCPnet.dll zum Herstellen einer Verbindung zum OpenSSH-Server: https://winscp.net/eng/docs/library#csharp
Hier ist das Code-Snippet zum Herstellen einer Verbindung mit WinSCPnet.dll:
static void WinSCPTest() {
SessionOptions ops = new SessionOptions {
Protocol = Protocol.Sftp,
PortNumber = 22,
HostName = "192.168.1.188",
UserName = "user123",
//Password = "Password1",
SshHostKeyFingerprint = @"ssh-rsa 2048 qu0f........................ddowUUXA="
};
ops.SshPrivateKeyPath = @"C:\temp\rsa-key-20190505.ppk";
using (Session session = new Session()) {
session.Open(ops);
MessageBox.Show("success");
}
}
Ersetzen Sie SshHostKeyFingerprintund SshPrivateKeyPathdurch Ihre eigenen Werte.
Bearbeiten: Screenshot der Dateiberechtigungen administrators_authorized_keys hinzugefügt:

Wenn OpenSSH SSH Serveres als Dienst ausgeführt wird, Systemsollte nur die Berechtigung vorhanden sein. Wenn Sie jedoch sshd.exean der Eingabeaufforderung ausgeführt werden, sollte nur der aktuelle Benutzer aufgeführt sein (Leseerlaubnis, Schreibverweigerung).