Unter Windows 8.1 stieß ich auf das server refused our key
Problem.
Befolgen
Sie die Anleitung: https://winscp.net/eng/docs/guide_windows_openssh_server Es war einfach, eine Verbindung mit dem Windows-Login username
und herzustellen password
. Bei der Authentifizierung mit username
in Kombination mit a private key
war 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 prompt
mit admin permissions
. Dann renne:
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
Hinweis: Geben Sie den vollständigen Pfad zur Exe an, andernfalls sshd
beschweren 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 key
Text hinein, zB: ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
Und dann speichere die Datei. Ich habe die Datei wie UTF-8
beim 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-11
ist der Name, der dem gegeben wird System
.
Um das zu beheben Bad permissions
, klicken Sie mit der rechten Maustaste auf die administrators_authorized_keys
Datei, gehen Sie zu Security Tab
, klicken Sie auf die Advanced
Schaltflä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 username
sollten lauten Read Allow
, Write Deny
alles 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 SshHostKeyFingerprint
und SshPrivateKeyPath
durch Ihre eigenen Werte.
Bearbeiten: Screenshot der Dateiberechtigungen administrators_authorized_keys hinzugefügt:
Wenn OpenSSH SSH Server
es als Dienst ausgeführt wird, System
sollte nur die Berechtigung vorhanden sein. Wenn Sie jedoch sshd.exe
an der Eingabeaufforderung ausgeführt werden, sollte nur der aktuelle Benutzer aufgeführt sein (Leseerlaubnis, Schreibverweigerung).