ฉันจะกำหนดค่า SSHd ให้อนุญาตคำสั่งเดียวโดยไม่ต้องให้สิทธิ์การเข้าสู่ระบบแก่ผู้ใช้อย่างสมบูรณ์ได้อย่างไร


11

ฉันกำลังมองหาวิธีที่ดีที่สุดในการเรียกคำสั่งระยะไกลผ่าน SSH ฉันสร้างผู้ใช้ 'rpcall' สร้างใบรับรองใหม่และกรอกรหัสที่ได้รับอนุญาต รักษาความปลอดภัยให้มากขึ้นด้วย

from="ip",no-agent-forwarding,no-X11-forwarding,no-port-forwarding,no-pty ssh-rsa ......

ตอนนี้ผู้ใช้ rpcall ไม่สามารถเข้าสู่เทอร์มินัลได้

ssh -l rpc 192.168.12.1
PTY allocation request failed on channel 0

แต่มันเป็นไปได้ที่จะเรียกใช้คำสั่งใด ๆ

ssh -l rpc 192.168.12.1 cat /etc/passwd

มีวิธีใดบ้างที่ฉันสามารถ จำกัด การประมวลผลคำสั่งให้มีเพียงหนึ่งสคริปต์ประมวลผลเท่านั้น? ตัวอย่างเช่น /home/rpcall/bin/command.sh

ฉันตั้งค่า bash shell สำหรับผู้ใช้นี้และใช้. bashrc บังคับให้เรียกใช้สคริปต์ประมวลผล แต่ฉันไม่รู้วิธีส่งพารามิเตอร์จากการเรียก ssh

.bashrc สำหรับผู้ใช้ rpcall

/home/rpcall/bin/command.sh $params1 $params2
exit

ssh โทรจากเครื่องอื่น

ssh -l rpcall 192.168.12.1 "param1" "param2"

คำตอบ:


19

คุณสามารถ จำกัด คำสั่งโดยใช้ไฟล์ authorized_keys วางcommand="/home/rpcall/bin/command.sh"ต่อหน้าคีย์ในไฟล์ authorized_keys และผู้ใช้จะเรียกใช้คำสั่งนั้นเมื่อพวกเขาเชื่อมต่อเท่านั้น

ตรวจสอบ man page สำหรับ authorized_keys ซึ่งมาจาก man page นั้น

 command="command"
         Specifies that the command is executed whenever this key is used
         for authentication.  The command supplied by the user (if any) is
         ignored.  The command is run on a pty if the client requests a
         pty; otherwise it is run without a tty.  If an 8-bit clean chan-
         nel is required, one must not request a pty or should specify
         no-pty.  A quote may be included in the command by quoting it
         with a backslash.  This option might be useful to restrict cer-
         tain public keys to perform just a specific operation.  An exam-
         ple might be a key that permits remote backups but nothing else.
         Note that the client may specify TCP and/or X11 forwarding unless
         they are explicitly prohibited.  The command originally supplied
         by the client is available in the SSH_ORIGINAL_COMMAND environ-
         ment variable.  Note that this option applies to shell, command
         or subsystem execution.

หากคุณต้องการคำสั่งมากกว่าหนึ่งคำสั่งคุณต้องตั้งค่าคีย์หลายชุดโดยทั่วไปแล้วใช้คีย์ที่แตกต่างกันเพื่อให้คำสั่งต่าง ๆ แก่คุณ

แก้ไข: ฉันเพิ่งสังเกตเห็นว่าคำสั่งเดิมมีอยู่ในSSH_ORIGINAL_COMMANDตัวแปรสภาพแวดล้อมดังนั้นคุณสามารถจัดการอินพุตนั้นโดยใช้สคริปต์ของคุณเองทำสิ่งที่ฉลาด


4
คำสั่งที่ระบุสามารถเข้าถึงพารามิเตอร์ผ่านSSH_ORIGINAL_COMMANDตัวแปรสภาพแวดล้อม วิธีนี้พารามิเตอร์สามารถส่งผ่านไปยังคำสั่งนั้นก็แค่ต้องแยกตัวแปรสภาพแวดล้อมที่และทำงานตามที่ร้องขอ
Oliver

ใช่อัปเดตคำตอบเมื่อไม่กี่นาทีที่ผ่านมาเมื่อฉันสังเกตเห็นเช่นกัน
EightBitTony

โซลูชั่นที่สมบูรณ์แบบพร้อมตัวเลือกคำสั่งและ SSH_ORIGINAL_COMMAND สิ่งที่ฉันต้องการ ขอบคุณ EightBitTony และ Oliver!
andrew
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.