¿Cómo configuro SSHd para permitir un solo comando, sin dar acceso completo al usuario?

11

Estoy buscando la mejor manera de llamar al comando remoto a través de SSH. Creo el usuario 'rpcall', genero un nuevo certificado y relleno autorizado_keys. Asegúralo un poco más con

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

ahora el usuario rpcall no puede iniciar sesión en la terminal

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

pero es posible ejecutar cualquier comando

ssh -l rpc 192.168.12.1 cat /etc/passwd

¿Hay alguna solución que pueda limitar la ejecución de comandos solo a un script de procesamiento? Por ejemplo /home/rpcall/bin/command.sh

Configuré bash shell para este usuario y utilicé el script de procesamiento de ejecución forzada .bashrc, pero no sé cómo pasar los parámetros de la llamada ssh.

.bashrc para el usuario rpcall

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

llamada ssh desde otra máquina

ssh -l rpcall 192.168.12.1 "param1" "param2"
Andrés
fuente

Respuestas:

19

Puede restringir comandos usando el archivo Authorized_keys. Ponga command="/home/rpcall/bin/command.sh"antes de la clave, en el archivo autorizado_claves, y el usuario solo ejecutará ese comando cuando se conecte.

Verifique la página de manual para claves autorizadas, esto es de esa página de manual,

 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 necesita más de un comando, básicamente necesita configurar varios conjuntos de teclas y usar diferentes teclas para darle diferentes comandos.

Editar: Acabo de notar que el comando original está disponible en la SSH_ORIGINAL_COMMANDvariable de entorno, por lo que podría manejar esa entrada utilizando su propio script, haciendo algo inteligente.

OchoBitTony
fuente
44
El comando especificado puede acceder a los parámetros a través de la SSH_ORIGINAL_COMMANDvariable de entorno. De esta forma, los parámetros se pueden pasar a ese comando, solo necesita analizar esa variable de entorno y hacer el trabajo solicitado.
Oliver
Sí, actualicé la respuesta hace unos minutos cuando noté eso también.
EightBitTony
Solución perfecta con opción de comando y SSH_ORIGINAL_COMMAND, exactamente lo que necesito. ¡Gracias EightBitTony y Oliver!
Andrew