Bagaimana cara mengkonfigurasi SSHd untuk mengizinkan satu perintah, tanpa memberikan akses masuk penuh ke pengguna?

11

Saya mencari cara terbaik untuk memanggil perintah jarak jauh melalui SSH. Saya membuat 'rpcall' pengguna, menghasilkan sertifikat baru dan mengisi otor_keys. Amankan sedikit lagi dengan

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

sekarang rpcall pengguna tidak dapat masuk ke terminal

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

tetapi dimungkinkan untuk menjalankan perintah apa pun

ssh -l rpc 192.168.12.1 cat /etc/passwd

Apakah ada solusi saya dapat membatasi eksekusi perintah hanya untuk satu skrip pemrosesan Misalnya / home / rpcall/bin/command.sh

Saya menyiapkan bash shell untuk pengguna ini dan menggunakan skrip pemrosesan run .bashrc, tetapi saya tidak tahu cara menyampaikan parameter dari panggilan ssh.

.bashrc untuk rpcall pengguna

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

ssh call dari mesin lain

ssh -l rpcall 192.168.12.1 "param1" "param2"
andrew
sumber

Jawaban:

19

Anda dapat membatasi perintah menggunakan file otor_keys. Letakkan di command="/home/rpcall/bin/command.sh"depan kunci, dalam file Authorized_key, dan pengguna hanya akan menjalankan perintah itu ketika mereka terhubung.

Periksa halaman manual untuk mendapatkan otorisasi, ini dari halaman manual itu,

 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.

Jika Anda memerlukan lebih dari satu perintah, pada dasarnya Anda perlu mengatur beberapa set kunci dan menggunakan tombol yang berbeda untuk memberi Anda perintah yang berbeda.

Sunting: Saya baru saja perhatikan, perintah asli tersedia di SSH_ORIGINAL_COMMANDvariabel lingkungan, jadi Anda memang bisa menangani input itu menggunakan skrip Anda sendiri, melakukan sesuatu yang pintar.

EightBitTony
sumber
4
Perintah yang ditentukan dapat mengakses parameter melalui SSH_ORIGINAL_COMMANDvariabel lingkungan. Parameter cara ini dapat diteruskan ke perintah itu, hanya perlu mengurai variabel lingkungan itu dan melakukan pekerjaan yang diminta.
Oliver
Yup, perbarui jawabannya beberapa menit yang lalu ketika saya perhatikan itu juga.
EightBitTony
Solusi sempurna dengan opsi perintah dan SSH_ORIGINAL_COMMAND, tepat seperti yang saya butuhkan. Terima kasih EightBitTony dan Oliver!
andrew