Eseguendo Windows 8.1 mi sono imbattuto nel server refused our keyproblema.
Seguendo la guida: https://winscp.net/eng/docs/guide_windows_openssh_server
È stato facile stabilire una connessione utilizzando il login di Windows usernamee password. Tuttavia, l'autenticazione con usernamein combinazione con a private key, la risposta è stata server refused our key.
Farlo funzionare con una chiave pubblica dipendeva dalle autorizzazioni sul file:
C:\ProgramData\ssh\administrators_authorized_keys
Questa è una pagina utile: https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
Arresta i due servizi OpenSSH, quindi apri un command promptcon admin permissions. Quindi esegui:
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
Nota: specificare il percorso completo dell'exe altrimenti si sshdlamenta. Questo crea un listener di connessione monouso. Il -dddlivello 3 è dettagliato.
Dopo aver effettuato una connessione, la scansione dei registri ha rivelato:
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
Ho dovuto creare il file: C:\ProgramData\ssh\administrators_authorized_keys
E copiare il public keytesto in esso, ad esempio: ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
E poi salvare il file. Ho salvato il file come UTF-8con l'estensione BOM. Non testato ANSI.
Quindi, eseguendo nuovamente la riga di comando una tantum, nei log è stato mostrato:
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è il nome dato al System.
Per risolvere il problema Bad permissions, fai clic con il pulsante destro del mouse sul administrators_authorized_keysfile, vai a Security Tab, fai clic sul Advancedpulsante e rimuovi le autorizzazioni ereditate. Quindi elimina tutto Group or user names:tranne il nome utente di accesso di Windows, ad esempio: YourMachineName\username
Le autorizzazioni per quello usernamedovrebbero essere Read Allow, Write Denytutto il resto è deselezionato. Anche il proprietario del file dovrebbe essereYourMachineName\username
Questo ha risolto il problema.
Altri link utili:
Scarica OpenSSH-Win32.zip da: https://github.com/PowerShell/Win32-OpenSSH/releases
Esempio C # di come utilizzare WinSCPnet.dll per stabilire una connessione al server OpenSSH: https://winscp.net/eng/docs/library#csharp
Di seguito è riportato lo snippet di codice per effettuare una connessione utilizzando 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");
}
}
Sostituisci SshHostKeyFingerprinte SshPrivateKeyPathcon i tuoi valori.
Modifica: aggiunto screenshot dei permessi del file administrators_authorized_keys:

Quando OpenSSH SSH Serverè in esecuzione come servizio, solo allora Systemdovrebbe avere il permesso. Tuttavia, se si esegue sshd.exedal prompt dei comandi, l'utente corrente dovrebbe essere l'unico elencato (lettura consentita, negazione scrittura).