Đang chạy Windows 8.1, tôi gặp sự server refused our keycố.
Làm theo hướng dẫn: https://winscp.net/eng/docs/guide_windows_openssh_server
Thật dễ dàng tạo kết nối bằng đăng nhập Windows usernamevà password. Tuy nhiên, xác thực với sự usernamekết hợp với a private key, phản hồi là server refused our key.
Bắt nó hoạt động với khóa công khai phụ thuộc vào các quyền trên tệp:
C:\ProgramData\ssh\administrators_authorized_keys
Đây là một trang hữu ích: https://github.com/PowerShell/Win32-OpenSSH/wiki/Troubleshooting-Steps
Dừng hai dịch vụ OpenSSH, sau đó mở command promptbằng admin permissions. Sau đó chạy:
C:\OpenSSH-Win32>c:\OpenSSH-Win32\sshd.exe -ddd
Lưu ý: chỉ định đường dẫn đầy đủ đến exe, nếu không sẽ sshdphàn nàn. Điều này tạo ra một trình nghe kết nối sử dụng một lần. Là -dddcấp độ 3 tiết.
Sau khi kết nối, quét các nhật ký được tiết lộ:
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
Phải tạo tệp: C:\ProgramData\ssh\administrators_authorized_keys
Và sao chép public keyvăn bản vào đó, ví dụ: ssh-rsa AAAA................MmpfXUCj rsa-key-20190505
Và sau đó lưu tệp. Tôi đã lưu tệp như UTF-8với BOM. Không thử nghiệm ANSI.
Sau đó, chạy lại dòng lệnh một lần, trong nhật ký hiển thị:
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-11là tên được đặt cho System.
Để sửa lỗi Bad permissions, hãy nhấp chuột phải vào administrators_authorized_keystệp, đi tới Security Tab, nhấp vào Advancednút và xóa các quyền kế thừa. Sau đó, xóa tất cả Group or user names:ngoại trừ tên người dùng đăng nhập Windows, ví dụ: YourMachineName\username
Quyền cho điều đó usernamephải có Read Allow, Write Denymọi thứ khác đều không được chọn. Chủ sở hữu của tệp cũng phải làYourMachineName\username
Điều này đã khắc phục sự cố.
Các liên kết hữu ích khác:
Tải xuống OpenSSH-Win32.zip từ: https://github.com/PowerShell/Win32-OpenSSH/releases
C # ví dụ về cách sử dụng WinSCPnet.dll để tạo kết nối với máy chủ OpenSSH: https://winscp.net/eng/docs/library#csharp
Đây là đoạn mã để tạo kết nối bằng cách sử dụng 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");
}
}
Thay thế SshHostKeyFingerprintvà SshPrivateKeyPathvới các giá trị của riêng bạn.
Chỉnh sửa: đã thêm ảnh chụp màn hình của quyền đối với tệp administrator_authorized_keys:

Khi OpenSSH SSH Serverđang chạy dưới dạng một Dịch vụ, thì chỉ Systemnên có quyền. Tuy nhiên, nếu chạy sshd.exetừ dấu nhắc lệnh, thì người dùng hiện tại phải là người duy nhất được liệt kê (cho phép đọc, từ chối ghi).