authorized_keys มีตัวเลือก command = "... " ที่ จำกัด คีย์ไว้ที่คำสั่งเดียว มีวิธี จำกัด คีย์ให้กับหลายคำสั่งหรือไม่? เช่นโดยมี regex ที่นั่นหรือแก้ไขไฟล์การกำหนดค่าอื่น ๆ ?
authorized_keys มีตัวเลือก command = "... " ที่ จำกัด คีย์ไว้ที่คำสั่งเดียว มีวิธี จำกัด คีย์ให้กับหลายคำสั่งหรือไม่? เช่นโดยมี regex ที่นั่นหรือแก้ไขไฟล์การกำหนดค่าอื่น ๆ ?
คำตอบ:
ไม่มันไม่ใช่คำสั่ง "อนุญาต" แต่คำสั่ง "บังคับ" (เป็นตัวเลือกForceCommand )
stdin
ความเป็นไปได้เพียงอย่างเดียวคือการใช้แป้นที่แตกต่างกันสำหรับคำสั่งที่แตกต่างกันหรือพารามิเตอร์อ่านจาก
คุณสามารถมีเพียงหนึ่งคำสั่งต่อหนึ่งคีย์เนื่องจากคำสั่งนั้น“ ถูกบังคับ”
แต่คุณสามารถใช้สคริปต์ตัวตัดคำ คำสั่งที่เรียกว่าได้รับบรรทัดคำสั่งเดิมเป็นตัวแปรสภาพแวดล้อม$SSH_ORIGINAL_COMMAND
ซึ่งสามารถประเมินได้
เช่นใส่ไว้ใน~/.ssh/allowed-commands.sh
:
#!/bin/sh
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.
case "$SSH_ORIGINAL_COMMAND" in
"systemctl restart cups")
systemctl restart cups
;;
"shutdown -r now")
shutdown -r now
;;
*)
echo "Access denied"
exit 1
;;
esac
จากนั้นอ้างอิง~/.ssh/authorized_keys
ด้วย
command="/home/user/.ssh/allowed-commands.sh",…
ในSSHที่ยอดเยี่ยมThe Secure Shell: The Definitive Guide book โดย O'Reilly ในบทที่แปดมีตัวอย่างที่ดีที่ใช้สคริปต์ดังต่อไปนี้:
#!/bin/sh
/bin/echo "Welcome!
Your choices are:
1 See today's date
2 See who's logged in
3 See current processes
q Quit"
/bin/echo "Your choice:"
read ans
while [ "$ans" != "q" ]
do
case "$ans" in
1)
/bin/date
;;
2)
/usr/bin/who
;;
3)
/usr/bin/top
;;
q)
/bin/echo "Goodbye"
exit 0
;;
*)
/bin/echo "Invalid choice '$ans': please try again"
;;
esac
/bin/echo "Your choice:"
read ans
done
exit 0
ใช้สิ่งนี้ใน.authorized_keys
ไฟล์ของคุณเช่น:
command="/path/to/your/script.sh" <ssh-key>
... ช่วยให้คุณนี้เมื่อทำssh
:
Welcome!
Your choices are:
1 See today's date
2 See who's logged in
3 See current processes
q Quit
Your choice:
scp
, sftp
และสิ่งอื่น ๆ ที่คุณอาจพบว่ามีประโยชน์บางวัน
command
ตัวเลือกนี้ใช้ไม่ได้ใช่ไหม
วิธีการอื่น ๆ ใช้เช่นเชลล์ที่ถูก จำกัด สำหรับผู้ใช้ที่กำหนดหรือใช้ wrapper ซึ่ง จำกัด การใช้คำสั่งไปยังไฟล์ / สคริปต์ที่พบในไดเรกทอรีเฉพาะจึงอนุญาตให้เพิ่มรายการคำสั่งโดยไม่ต้องเปลี่ยน wrapper
บทความอื่นอธิบายสคริปต์ทั่วไปซึ่งอนุญาตให้อาร์กิวเมนต์บรรทัดคำสั่งไปยังคำสั่งที่อนุญาต แต่อนุญาตให้ล็อกลงด้วยกฎที่แสดงเป็นนิพจน์ทั่วไป
ตัวอย่างนี้จะแสดงวิธีดังต่อไปนี้:
command="only systemctl shutdown"
และ.onlyrules
ไฟล์จะถูกสร้างขึ้นด้วยเนื้อหานี้:
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
ข้อดีของวิธีการ 'เท่านั้น' นี้คือไม่จำเป็นต้องเขียนสคริปต์แต่ละรายการสำหรับผู้ใช้แต่ละคนและสถานการณ์
ForcedCommand
SSH_ORIGINAL_COMMAND
(ต่อman sshd
) เพื่อให้พร้อมใช้งานในสคริปต์ นอกจากนี้เพื่อให้ตัวอย่างสำหรับสคริปต์อัตโนมัติที่อนุญาตให้บางรูปแบบของSSH_ORIGINAL_COMMAND
การทำงาน ดูเพิ่มเติมunixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html