Executando o Windows 8.1, encontrei o server refused our key
problema.
Seguindo o guia: https://winscp.net/eng/docs/guide_windows_openssh_server
Foi fácil fazer a conexão usando o login do Windows username
e password
. No entanto, autenticando com o username
em combinação com a private key
, a resposta foi server refused our key
.
Fazer funcionar com uma chave pública se resumia às permissões no arquivo:
C:\ProgramData\ssh\administrators_authorized_keys
Esta é uma página útil: https://github.com/PowerShell/Win32-OpenSSH/wiki/Trou troubleshooting - Steps
Pare os dois serviços OpenSSH e abra um command prompt
com admin permissions
. Então corra:
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
Nota: especifique o caminho completo para o exe, caso contrário sshd
reclama. Isso cria um ouvinte de conexão de uso único. O -ddd
nível 3 é detalhado.
Depois de fazer uma conexão, a varredura dos registros revelou:
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
Tive que criar o arquivo: C:\ProgramData\ssh\administrators_authorized_keys
E copiar o public key
texto nele, por exemplo: ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
E depois salvar o arquivo. Salvei o arquivo como UTF-8
com o BOM
. Não testei ANSI
.
Em seguida, executando a linha de comando única novamente, nos logs mostrados:
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
é o nome dado ao System
.
Para corrigir o problema Bad permissions
, clique com o botão direito do mouse no administrators_authorized_keys
arquivo, vá para o Security Tab
, clique no Advanced
botão e remova as permissões herdadas. Em seguida, exclua tudo, Group or user names:
exceto o nome de usuário de login do Windows, por exemplo: YourMachineName\username
As permissões para isso username
devem ser Read Allow
, Write Deny
todo o resto está desmarcado. O proprietário do arquivo também deve serYourMachineName\username
Isso resolveu o problema.
Outros links úteis:
Baixe OpenSSH-Win32.zip em: https://github.com/PowerShell/Win32-OpenSSH/releases
Exemplo C # de como usar o WinSCPnet.dll para fazer uma conexão ao servidor OpenSSH: https://winscp.net/eng/docs/library#csharp
Aqui está o snippet de código para fazer uma conexão usando 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");
}
}
Substitua SshHostKeyFingerprint
e SshPrivateKeyPath
com seus próprios valores.
Editar: captura de tela adicionada das permissões do arquivo administrators_authorized_keys:
Quando OpenSSH SSH Server
está funcionando como um serviço, então só System
deve ter permissão. No entanto, se estiver executando a sshd.exe
partir do prompt de comando, o usuário atual deve ser o único listado (permissão de leitura, negação de gravação).