Al ejecutar Windows 8.1 me encontré con el server refused our key
problema.
Siguiendo la guía: https://winscp.net/eng/docs/guide_windows_openssh_server
Fue fácil establecer una conexión usando el inicio de sesión de Windows username
y password
. Sin embargo, al autenticarse con el username
en combinación con a private key
, la respuesta fue server refused our key
.
Hacer que funcione con una clave pública se redujo a los permisos en el archivo:
C:\ProgramData\ssh\administrators_authorized_keys
Esta es una página útil: https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
Detenga los dos servicios OpenSSH, luego abra un command prompt
con admin permissions
. Entonces corre:
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
Nota: especifique la ruta completa al exe, de lo contrario se sshd
queja. Esto crea un escucha de conexión de un solo uso. El -ddd
es el nivel 3 detallado.
Después de realizar una conexión, el escaneo de los registros reveló:
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
Tuve que crear el archivo: C:\ProgramData\ssh\administrators_authorized_keys
Y copiar el public key
texto en él, por ejemplo: ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
Y luego guardar el archivo. Guardé el archivo como UTF-8
con el BOM
. No probé ANSI
.
Luego, ejecutando la línea de comando de una sola vez nuevamente, en los registros se muestra:
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
es el nombre que se le da al System
.
Para arreglar el Bad permissions
, haga clic derecho en el administrators_authorized_keys
archivo, vaya al Security Tab
, haga clic en el Advanced
botón y elimine los permisos heredados. Luego elimine todo Group or user names:
excepto el nombre de usuario de inicio de sesión de Windows, por ejemplo: YourMachineName\username
Los permisos para eso username
deberían ser Read Allow
, Write Deny
todo lo demás está desmarcado. El propietario del archivo también debe serYourMachineName\username
Esto solucionó el problema.
Otros enlaces útiles:
Descargue OpenSSH-Win32.zip desde: https://github.com/PowerShell/Win32-OpenSSH/releases
Ejemplo de C # de cómo utilizar WinSCPnet.dll para establecer una conexión con el servidor OpenSSH: https://winscp.net/eng/docs/library#csharp
Aquí está el fragmento de código para hacer una conexión 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");
}
}
Reemplazar SshHostKeyFingerprint
y SshPrivateKeyPath
con sus propios valores.
Editar: captura de pantalla agregada de los permisos de archivo administrator_authorized_keys:
Cuando OpenSSH SSH Server
se ejecuta como un servicio, solo System
debe tener permiso. Sin embargo, si se ejecuta sshd.exe
desde el símbolo del sistema, el usuario actual debe ser el único en la lista (leer permitir, escribir denegar).