Come configuro SSHd per consentire un singolo comando, senza fornire all'utente l'accesso completo al login?


11

Sto cercando il modo migliore per chiamare il comando remoto su SSH. Creo l'utente "rpcall", genera un nuovo certificato e riempio le chiavi autorizzate. Proteggilo un po 'di più con

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

ora l'utente rpcall non può accedere al terminale

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

ma è possibile eseguire qualsiasi comando

ssh -l rpc 192.168.12.1 cat /etc/passwd

Esiste una soluzione che posso limitare l'esecuzione del comando a un solo script di elaborazione? Ad esempio /home/rpcall/bin/command.sh

Ho installato la shell bash per questo utente e usando lo script di elaborazione forzata .bashrc, ma non so come passare i parametri dalla chiamata ssh.

.bashrc per l'utente rpcall

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

chiamata ssh da altra macchina

ssh -l rpcall 192.168.12.1 "param1" "param2"

Risposte:


19

È possibile limitare i comandi utilizzando il file authorized_keys. Metti command="/home/rpcall/bin/command.sh"prima della chiave, nel file authorized_keys, e l'utente eseguirà quel comando solo quando si connetterà.

Controlla la pagina man per le chiavi autorizzate, questa è da quella pagina man,

 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.

Se hai bisogno di più di un comando, devi fondamentalmente impostare diversi set di chiavi e utilizzare diversi tasti per darti comandi diversi.

Modifica: ho appena notato che il comando originale è disponibile nella SSH_ORIGINAL_COMMANDvariabile d'ambiente, quindi potresti davvero gestire quell'input usando il tuo script, facendo qualcosa di intelligente.


4
Il comando specificato è in grado di accedere ai parametri attraverso la SSH_ORIGINAL_COMMANDvariabile d'ambiente. In questo modo i parametri possono essere passati a quel comando, deve solo analizzare quella variabile d'ambiente ed eseguire il lavoro richiesto.
Oliver,

Sì, ho aggiornato la risposta qualche minuto fa quando l'ho notato anch'io.
EightBitTony,

Soluzione perfetta con opzione di comando e SSH_ORIGINAL_COMMAND, esattamente ciò di cui ho bisogno. Grazie EightBitTony e Oliver!
Andrew
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.