При запуске 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
из командной строки текущий пользователь должен быть единственным в списке (разрешение на чтение, запрет на запись).