Під керуванням Windows 8.1 я зіткнувся з server refused our key
проблемою.
Слідуючи керівництву: https://winscp.net/eng/docs/guide_windows_openssh_server
Встановити підключення було легко, використовуючи логін Windows username
і password
. Однак аутентифікація за допомогою username
комбінації з a private key
, відповідь була server refused our key
.
Працювання з відкритим ключем зводилося до дозволів у файлі:
C:\ProgramData\ssh\administrators_authorized_keys
Це корисна сторінка: https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
Зупиніть дві служби OpenSSH, а потім відкрийте command prompt
с admin permissions
. Потім запустіть:
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
Примітка: вкажіть повний шлях до exe, інакше sshd
скаржиться. Це створює одноразовий прослуховувач підключення. Це -ddd
багатослівний рівень 3.
Після встановлення з'єднання, при скануванні журналів виявилося:
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
Довелося створити файл: C:\ProgramData\ssh\administrators_authorized_keys
і скопіювати в нього public key
текст, наприклад: ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
А потім зберегти файл. Я зберіг файл, UTF-8
з BOM
. Не тестував ANSI
.
Потім знову запустіть одноразовий командний рядок, в журналах показано:
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
- це ім'я, дане System
.
Щоб виправити помилку Bad permissions
, клацніть правою кнопкою миші на administrators_authorized_keys
файлі, перейдіть до Security Tab
, натисніть Advanced
кнопку та видаліть успадковані дозволи. Потім видаліть усі, Group or user names:
крім імені користувача для входу в систему Windows, наприклад: YourMachineName\username
Дозволи на цеusername
мають бути Read Allow
, Write Deny
все інше не позначено. Власником файлу також повинен бутиYourMachineName\username
Це вирішило проблему.
Інші корисні посилання:
Завантажте OpenSSH-Win32.zip з: https://github.com/PowerShell/Win32-OpenSSH/releases
Приклад на C #, як використовувати WinSCPnet.dll для встановлення з'єднання з сервером OpenSSH: https://winscp.net/eng/docs/library#csharp
Ось фрагмент коду для встановлення з'єднання за допомогою 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");
}
}
Замініть SshHostKeyFingerprint
і SshPrivateKeyPath
своїми цінностями.
Редагувати: додано знімок екрана дозволів файлу administrators_authorized_keys:
Коли OpenSSH SSH Server
працює як служба, тоді лише System
повинен мати дозвіл. Однак, якщо він працює sshd.exe
з командного рядка, то поточним користувачем повинен бути єдиний із перелічених (читати дозволити, писати заборонено).