Uruchamiając Windows 8.1 napotkałem server refused our key
problem.
Postępując zgodnie z instrukcją: https://winscp.net/eng/docs/guide_windows_openssh_server Nawiązanie
połączenia przy użyciu logowania do systemu Windows username
i password
. Jednak po uwierzytelnieniu username
w połączeniu z a private key
, odpowiedź była server refused our key
.
Uruchomienie go z kluczem publicznym sprowadzało się do uprawnień do pliku:
C:\ProgramData\ssh\administrators_authorized_keys
To jest pomocna strona: https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
Zatrzymaj dwie usługi OpenSSH, a następnie otwórz plik za command prompt
pomocą admin permissions
. Następnie uruchomić:
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
Uwaga: podaj pełną ścieżkę do pliku exe, w przeciwnym razie sshd
narzeka. Tworzy to nasłuchiwanie połączeń jednorazowego użytku. -ddd
Jest rozwlekły poziomie 3.
Po nawiązaniu połączenia skanowanie logów ujawniło:
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
Musiałem stworzyć plik: C:\ProgramData\ssh\administrators_authorized_keys
I skopiować do niego public key
tekst, np .: ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
A potem zapisać plik. Uratowałem jak plik UTF-8
z BOM
. Nie testowałem ANSI
.
Następnie ponownie uruchomiłem jednorazową linię poleceń, w dziennikach pokazało się:
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
to nazwa nadana System
.
Aby naprawić Bad permissions
, kliknij prawym przyciskiem myszy administrators_authorized_keys
plik Security Tab
, przejdź do, kliknij Advanced
przycisk i usuń odziedziczone uprawnienia. Następnie usuń wszystko Group or user names:
oprócz nazwy użytkownika logowania do systemu Windows, np .: YourMachineName\username
Uprawnienia do tego username
powinny być Read Allow
, Write Deny
wszystko inne jest odznaczone. Właścicielem pliku również powinien byćYourMachineName\username
To rozwiązało problem.
Inne przydatne linki:
Pobierz OpenSSH-Win32.zip z: https://github.com/PowerShell/Win32-OpenSSH/releases
Przykład w C #, jak używać WinSCPnet.dll do nawiązywania połączenia z serwerem OpenSSH: https://winscp.net/eng/docs/library#csharp
Oto fragment kodu umożliwiający nawiązanie połączenia za pomocą 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");
}
}
Zastąp SshHostKeyFingerprint
i SshPrivateKeyPath
własnymi wartościami.
Edycja: dodano zrzut ekranu uprawnień do plików administrators_authorized_keys:
Gdy OpenSSH SSH Server
działa jako usługa, System
powinno mieć tylko pozwolenie. Jeśli jednak uruchamiasz sshd.exe
z wiersza poleceń, bieżący użytkownik powinien być jedynym na liście (zezwolenie na odczyt, odmowa zapisu).