Đang chạy Windows 8.1, tôi gặp sự server refused our key
cố.
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 username
và password
. Tuy nhiên, xác thực với sự username
kế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 prompt
bằ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ẽ sshd
phà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à -ddd
cấ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 key
vă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-8
vớ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-11
là tên được đặt cho System
.
Để sửa lỗi Bad permissions
, hãy nhấp chuột phải vào administrators_authorized_keys
tệp, đi tới Security Tab
, nhấp vào Advanced
nú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 đó username
phải có Read Allow
, Write Deny
mọ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ế SshHostKeyFingerprint
và SshPrivateKeyPath
vớ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ỉ System
nên có quyền. Tuy nhiên, nếu chạy sshd.exe
từ 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).