Eseguendo Windows 8.1 mi sono imbattuto nel server refused our key
problema.
Seguendo la guida: https://winscp.net/eng/docs/guide_windows_openssh_server
È stato facile stabilire una connessione utilizzando il login di Windows username
e password
. Tuttavia, l'autenticazione con username
in 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 prompt
con admin permissions
. Quindi esegui:
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
Nota: specificare il percorso completo dell'exe altrimenti si sshd
lamenta. Questo crea un listener di connessione monouso. Il -ddd
livello 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 key
testo in esso, ad esempio: ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
E poi salvare il file. Ho salvato il file come UTF-8
con 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_keys
file, vai a Security Tab
, fai clic sul Advanced
pulsante 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 username
dovrebbero essere Read Allow
, Write Deny
tutto 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 SshHostKeyFingerprint
e SshPrivateKeyPath
con i tuoi valori.
Modifica: aggiunto screenshot dei permessi del file administrators_authorized_keys:
Quando OpenSSH SSH Server
è in esecuzione come servizio, solo allora System
dovrebbe avere il permesso. Tuttavia, se si esegue sshd.exe
dal prompt dei comandi, l'utente corrente dovrebbe essere l'unico elencato (lettura consentita, negazione scrittura).