เป็นไปได้หรือไม่ที่จะกำหนดค่า ssh (บน linux) เพื่ออนุญาตการเข้าถึงช่องสัญญาณเท่านั้น? เช่นผู้ใช้สามารถตั้งค่าอุโมงค์ แต่ไม่สามารถรับไฟล์เชลล์ / การเข้าถึง
เป็นไปได้หรือไม่ที่จะกำหนดค่า ssh (บน linux) เพื่ออนุญาตการเข้าถึงช่องสัญญาณเท่านั้น? เช่นผู้ใช้สามารถตั้งค่าอุโมงค์ แต่ไม่สามารถรับไฟล์เชลล์ / การเข้าถึง
คำตอบ:
ใช่เพียงใช้/bin/false
เป็นเชลล์และสั่งให้ผู้ใช้เริ่มต้นกระบวนการ tunneling SSH โดยไม่ต้องดำเนินการคำสั่งระยะไกลใด ๆ (เช่นการ-N
ตั้งค่าสถานะสำหรับ OpenSSH):
ssh -N -L 1234:target-host:5678 ssh-host
/bin/false
เป็นเชลล์คุณจะไม่สามารถเข้าถึงเชลล์ได้เนื่องจากทุกเซสชั่นการเข้าสู่ระบบจะยุติลงทันที
ในไฟล์. ssh / authorized_keys ของผู้ใช้ให้ใส่ดังนี้:
permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
ดังนั้นโดยพื้นฐานแล้วคุณจะต้องอยู่หน้าคีย์สาธารณะ ssh ของผู้ใช้คั่นด้วยช่องว่าง ในตัวอย่างการเชื่อมต่อโดยใช้กุญแจสาธารณะที่เฉพาะเจาะจงจะได้รับอนุญาตให้ทำการส่งต่อพอร์ต SSH ไปยังเซิร์ฟเวอร์ MySQL ของ 192.168.1.10 และเว็บเซิร์ฟเวอร์ของ 10.0.0.16 เท่านั้นและจะไม่ได้รับมอบหมายเชลล์ (ไม่มี pty) คุณกำลังถามเกี่ยวกับตัวเลือก "no-pty" โดยเฉพาะ แต่ตัวเลือกอื่นอาจมีประโยชน์หากผู้ใช้ควรทำการส่งสัญญาณไปยังเซิร์ฟเวอร์เฉพาะเท่านั้น
ดูหน้าคนสำหรับ sshd สำหรับตัวเลือกเพิ่มเติมสำหรับไฟล์ authorized_keys
โปรดทราบว่าประสบการณ์ของผู้ใช้อาจดูแปลก ๆ เล็กน้อย: เมื่อพวกเขาเข้ามามันจะดูเหมือนว่าเซสชันจะถูกหยุดทำงาน (เนื่องจากไม่ได้รับ pty) ไม่เป็นไร. หากผู้ใช้ระบุการส่งต่อพอร์ตด้วยเช่น "-L3306: 192.168.1.10: 3306" การส่งต่อพอร์ตจะยังคงมีผล
ไม่ว่าในกรณีใดลองดูสิ
no-pty
ไม่ได้ป้องกันการเข้าถึงเชลล์ แต่ก็ไม่ให้เชลล์ pty มันไม่แสดงพรอมต์ (เช่น "ปรากฏขึ้นเพื่อแขวน") แต่คุณยังคงสามารถให้คำสั่งได้ดี คุณต้องการcommand="..."
ตัวเลือกใน.ssh/authorized_keys
หากคุณต้องการ จำกัด การเข้าถึงเชลล์จากที่นั่น
ให้เชลล์แก่ผู้ใช้ที่อนุญาตให้พวกเขาออกจากระบบเท่านั้นเช่น /bin/press_to_exit.sh
#! / bin / ทุบตี read -n 1 -p "กดปุ่มใดก็ได้เพื่อออกจาก" ปุ่ม
วิธีนี้เขาจะสามารถอยู่ในระบบได้ตราบเท่าที่เขาต้องการโดยมีอุโมงค์ที่ใช้งานอยู่ แต่ไม่เรียกใช้คำสั่งใด ๆ Ctrl-c
ปิดการเชื่อมต่อ
กำหนดเชลล์ที่ไม่อนุญาตให้ผู้ใช้ล็อกอิน
เช่น
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
จะป้องกันไม่ให้พวกเขาได้รับเชลล์พรอมต์และให้เวลาหมดเวลา 60 วินาที - หากไม่มีการเชื่อมต่อที่ใช้งานเป็นเวลา 60 วินาทีจากนั้นมันจะออกจากระบบและจะตัดการเชื่อมต่ออย่างสมบูรณ์ (เพิ่มจำนวนตามข้อกำหนด)
พวกเขาไม่สามารถดำเนินการคำสั่งระยะไกลเช่นกันเพราะเปลือกนั้นจะไม่ยอมให้
logout
" ในแบบปกติ
/sbin/nologin
/etc/nologin.txt
ทางออกของฉันคือการให้ผู้ใช้ที่อาจจะเป็นแค่การขุดอุโมงค์โดยไม่ต้องเปลือกโต้ตอบการตั้งค่าในการที่เปลือก/ etc / passwdไป/ usr / bin / tunnel_shell
เพียงแค่สร้างปฏิบัติการไฟล์/ usr / bin / tunnel_shellกับวง จำกัด
นอกจากนี้ยังใช้ประโยชน์จากAllowGroups
และMatch Group
ตัวเลือก
อธิบายอย่างเต็มที่ที่นี่: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
-N
พวกเขามีสิทธิ์เข้าถึงเชลล์ นี้จริงๆไม่ได้แก้ปัญหาและเป็นอันตราย