Làm cách nào để định cấu hình SSHd để cho phép một lệnh duy nhất mà không cấp quyền truy cập đăng nhập đầy đủ cho người dùng?


11

Tôi đang tìm cách tốt nhất để gọi lệnh từ xa qua SSH. Tôi tạo người dùng 'rpcall', tạo chứng chỉ mới và điền ủy quyền. Bảo vệ nó thêm một chút với

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

bây giờ người dùng rpcall không thể đăng nhập vào thiết bị đầu cuối

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

nhưng có thể chạy bất kỳ lệnh nào

ssh -l rpc 192.168.12.1 cat /etc/passwd

Có giải pháp nào tôi có thể giới hạn thực thi lệnh chỉ trong một tập lệnh xử lý không? Ví dụ: /home/rpcall/bin/command.sh

Tôi đã thiết lập bash shell cho người dùng này và sử dụng .bashrc buộc chạy tập lệnh xử lý, nhưng tôi không biết làm thế nào để truyền tham số từ cuộc gọi ssh.

.bashrc cho người dùng rpcall

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

cuộc gọi ssh từ máy khác

ssh -l rpcall 192.168.12.1 "param1" "param2"

Câu trả lời:


19

Bạn có thể hạn chế các lệnh bằng cách sử dụng tệp ủy quyền. Đặt command="/home/rpcall/bin/command.sh"trước khóa, trong tệp ủy quyền và người dùng sẽ chỉ chạy lệnh đó khi họ kết nối.

Kiểm tra trang man cho ủy quyền_key, đây là từ trang người đàn ông đó,

 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.

Nếu bạn cần nhiều hơn một lệnh, về cơ bản bạn cần thiết lập một số bộ khóa và sử dụng các khóa khác nhau để cung cấp cho bạn các lệnh khác nhau.

Chỉnh sửa: Tôi chỉ nhận thấy, lệnh ban đầu có sẵn trong SSH_ORIGINAL_COMMANDbiến môi trường, vì vậy bạn thực sự có thể xử lý đầu vào đó bằng cách sử dụng tập lệnh của riêng bạn, làm điều gì đó thông minh.


4
Lệnh được chỉ định có thể truy cập các tham số thông qua SSH_ORIGINAL_COMMANDbiến môi trường. Bằng cách này, các tham số có thể được truyền cho lệnh đó, nó chỉ cần phân tích biến môi trường đó và thực hiện công việc được yêu cầu.
Oliver

Yup, đã cập nhật câu trả lời vài phút trước khi tôi nhận thấy điều đó.
EightBitTony

Giải pháp hoàn hảo với tùy chọn lệnh và SSH_ORIGINAL_COMMAND, chính xác là những gì tôi cần. Cảm ơn EightBitTony và Oliver!
andrew
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.