ใช้ Windows 8.1 ฉันพบในไฟล์ server refused our key
ปัญหา
ทำตามคำแนะนำ: https://winscp.net/eng/docs/guide_windows_openssh_server
การเชื่อมต่อทำได้ง่ายโดยใช้การเข้าสู่ระบบ Windows username
และpassword
. อย่างไรก็ตามการพิสูจน์ตัวตนโดยใช้username
ร่วมกับ a 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
เป็น verbose ระดับ 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
ตัวอย่าง C # ของวิธีใช้ WinSCPnet.dll เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ OpenSSH: https://winscp.net/eng/docs/library#csharp
นี่คือข้อมูลโค้ดเพื่อทำการเชื่อมต่อโดยใช้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
ด้วยคุณค่าของคุณเอง
แก้ไข: เพิ่มภาพหน้าจอของการอนุญาตไฟล์ administrator_authorized_keys:
เมื่อOpenSSH SSH Server
ใดที่ทำงานเป็นบริการSystem
ควรได้รับอนุญาตเท่านั้น อย่างไรก็ตามหากเรียกใช้sshd.exe
จากพรอมต์คำสั่งผู้ใช้ปัจจุบันควรเป็นผู้เดียวในรายการ (อ่านอนุญาตเขียนปฏิเสธ)