Comment configurer SSHd pour autoriser une seule commande, sans donner un accès de connexion complet à l'utilisateur?

11

Je recherche le meilleur moyen d'appeler la commande à distance via SSH. Je crée l'utilisateur 'rpcall', génère un nouveau certificat et remplis authorized_keys. Sécurisez-le un peu plus avec

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

maintenant l'utilisateur rpcall ne peut pas se connecter au terminal

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

mais il est possible d'exécuter n'importe quelle commande

ssh -l rpc 192.168.12.1 cat /etc/passwd

Existe-t-il une solution pour limiter l'exécution des commandes à un seul script de traitement? Par exemple /home/rpcall/bin/command.sh

J'ai configuré le shell bash pour cet utilisateur et en utilisant le script de traitement de l'exécution forcée .bashrc, mais je ne sais pas comment passer les paramètres de l'appel ssh.

.bashrc pour l'utilisateur rpcall

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

appel ssh depuis une autre machine

ssh -l rpcall 192.168.12.1 "param1" "param2"
andrew
la source

Réponses:

19

Vous pouvez restreindre les commandes à l'aide du fichier authorized_keys. Mettez command="/home/rpcall/bin/command.sh"avant la clé, dans le fichier authorized_keys, et l'utilisateur n'exécutera cette commande que lorsqu'il se connectera.

Consultez la page de manuel pour les touches autorisées, c'est à partir de cette page de manuel,

 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.

Si vous avez besoin de plusieurs commandes, vous devez essentiellement configurer plusieurs jeux de clés et utiliser différentes clés pour vous donner différentes commandes.

Edit: je viens de remarquer que la commande d'origine est disponible dans la SSH_ORIGINAL_COMMANDvariable d'environnement, donc vous pouvez en effet gérer cette entrée en utilisant votre propre script, en faisant quelque chose d'intelligent.

EightBitTony
la source
4
La commande spécifiée peut accéder aux paramètres via la SSH_ORIGINAL_COMMANDvariable d'environnement. De cette façon, les paramètres peuvent être passés à cette commande, il suffit d'analyser cette variable d'environnement et de faire le travail demandé.
Oliver
Oui, j'ai mis à jour la réponse il y a quelques minutes quand je l'ai aussi remarqué.
EightBitTony
Solution parfaite avec option de commande et SSH_ORIGINAL_COMMAND, exactement ce dont j'ai besoin. Merci EightBitTony et Oliver!
andrew