运行Windows 8.1我遇到了 server refused our key问题。
按照指南进行操作:https : //winscp.net/eng/docs/guide_windows_openssh_server
使用Windows登录名username和进行连接很容易password。但是,与username结合使用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
如何使用WinSCPnet.dll与OpenSSH服务器建立连接的C#示例: https
以下是使用进行连接的代码段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从命令提示符运行,则当前用户应该是列出的唯一用户(读允许,写拒绝)。