เรามีการตั้งค่า การใช้งานเซิร์ฟเวอร์ OpenSSH ของ Microsoft บนเซิร์ฟเวอร์ Windows 2019 (v1809) และเปิดใช้งานการรับรองความถูกต้องตามคีย์สาธารณะ เราต้องการที่จะปรับใช้ คำสั่งบังคับ และกำลังต่อสู้กับ อักขระช่องว่างในเส้นทาง ของคำสั่งดังกล่าว
ตัวอย่างขั้นต่ำ:
ผู้ใช้ ผู้ใช้1 มีดังต่อไปนี้ อนุญาต_คีย์ ไฟล์:
command="C:\Program Files\SomePath\SomeProgram.exe" ssh-ed25519 AAAAC3N...
เมื่อเราพยายามที่จะ จุ๊ๆ เข้าไปในเครื่องในฐานะผู้ใช้นั้น จะเกิดสิ่งต่อไปนี้:
$ ssh -i <user1_key_id> user1@server.example.com
ไม่รู้จัก 'C:\Program' เป็นคำสั่งภายในหรือภายนอก
โปรแกรมที่ใช้งานได้หรือแบตช์ไฟล์
ปิดการเชื่อมต่อกับ server.example.com
(โปรดทราบว่าเรามีเอเจนต์ SSH ที่ทำงานอยู่เพื่อไม่ให้มีการสืบค้นข้อความรหัสผ่านในส่วนย่อยของเซสชันเทอร์มินัลด้านบน)
IMHO ค่อนข้างชัดเจนว่าปัญหาเกิดจากอักขระช่องว่างในเส้นทางของโปรแกรมที่ควรดำเนินการอย่างไรก็ตาม เราไม่แน่ใจว่าทำไมเครื่องหมายอัญประกาศคู่รอบๆ คำสั่งใน อนุญาต_คีย์ ไฟล์ไม่ได้ป้องกันปัญหา เราได้พยายามเพิ่มเครื่องหมายคำพูดคู่เพิ่มเติมโดยใช้วิธีการ Escape ที่รู้จักกันดี:
command="\"C:\Program Files\SomePath\SomeProgram.exe\"" ...
command="^"C:\Program Files\SomePath\SomeProgram.exe^"" ...
command="""C:\Program Files\SomePath\SomeProgram.exe""" ...
อันแรกนำไปสู่ข้อผิดพลาดเดียวกันกับที่อธิบายไว้ข้างต้น รายการที่สองและรายการที่สามนำไปสู่ข้อความแสดงข้อผิดพลาดอื่น:
user1@server.example.com: ปฏิเสธการอนุญาต (publickey)
ตอนนี้เราติดขัดและมีคำถามดังนี้
เราจะต้องเขียนคำสั่งดังกล่าวอย่างไรใน อนุญาต_คีย์ ไฟล์สำหรับเซิร์ฟเวอร์ Microsoft OpenSSH สำหรับ Windows?