ใน Ubuntu 11.10 ฉันพบว่าฉันสามารถบล็อกคำสั่ง ssh ส่งโดยมีและไม่มี -T และบล็อกการคัดลอก scp ในขณะที่อนุญาตให้ส่งต่อพอร์ตได้
โดยเฉพาะฉันมีเซิร์ฟเวอร์ redis บน "somehost" ที่ผูกไว้กับ localhost: 6379 ที่ฉันต้องการแบ่งปันอย่างปลอดภัยผ่านอุโมงค์ ssh ไปยังโฮสต์อื่น ๆ ที่มีไฟล์คีย์และจะ ssh ใน:
$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost
สิ่งนี้จะทำให้เซิร์ฟเวอร์ redis พอร์ต "localhost" 6379 บน "somehost" ปรากฏในเครื่องบนโฮสต์ที่เรียกใช้คำสั่ง ssh โดยแมปเป็น "localhost" พอร์ต 16379
บนรีโมต "somehost" นี่คือสิ่งที่ฉันใช้สำหรับ Authorized_keys:
cat .ssh/authorized_keys (portions redacted)
no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost
no-pty เดินทางขึ้นความพยายาม ssh ส่วนใหญ่ที่ต้องการเปิดเทอร์มินัล
permitopen อธิบายว่าพอร์ตใดบ้างที่อนุญาตให้ส่งต่อในกรณีนี้พอร์ต 6379 พอร์ตเซิร์ฟเวอร์ redis ที่ฉันต้องการส่งต่อ
คำสั่ง = "/ bin / echo do-not-send-orders" echoes back "do-not-send-command" หากมีคนหรือบางสิ่งบางอย่างจัดการส่งคำสั่งไปยังโฮสต์ผ่าน ssh -T หรืออย่างอื่น
จาก Ubuntu ล่าสุดman sshd
มีคำสั่ง Authorized_keys / command ดังนี้:
command = "command" ระบุว่าคำสั่งถูกเรียกใช้งานเมื่อใดก็ตามที่ใช้คีย์นี้สำหรับการพิสูจน์ตัวตน คำสั่งที่จัดทำโดยผู้ใช้ (ถ้ามี) จะถูกละเว้น
ความพยายามในการใช้การคัดลอกไฟล์ scp ที่ปลอดภัยจะล้มเหลวด้วยเสียงสะท้อนของ "do-not-send-orders" ฉันพบว่า sftp ล้มเหลวด้วยการกำหนดค่านี้
ฉันคิดว่าคำแนะนำเชลล์ที่ถูก จำกัด ซึ่งทำในคำตอบก่อนหน้านี้ก็เป็นความคิดที่ดีเช่นกัน นอกจากนี้ฉันยอมรับว่าทุกอย่างที่มีรายละเอียดในที่นี้สามารถพิจารณาได้จากการอ่าน "man sshd" และค้นหา "Authorized_keys" ในนั้น
no-pty
ไม่อนุญาตให้เปิด seesion โต้ตอบมันไม่มีอะไรที่จะป้องกันไม่ให้การดำเนินการคำสั่งเพื่อให้ผู้ใช้สามารถแก้ไขไฟล์ถ้าเขามีการเข้าถึงกับสิ่งที่ต้องการauthorized_keys
ssh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'