运行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
从命令提示符运行,则当前用户应该是列出的唯一用户(读允许,写拒绝)。