Respuestas:
No. No es un comando "permitido", sino un comando "forzado" (como opción ForceCommand ).
La única posibilidad es usar diferentes teclas para diferentes comandos o leer parámetros stdin
.
Solo puede tener un comando por tecla, porque el comando es "forzado".
Pero puedes usar un script de envoltura. El comando llamado obtiene la línea de comando original como variable de entorno$SSH_ORIGINAL_COMMAND
, que puede evaluar.
Por ejemplo, pon esto en ~/.ssh/allowed-commands.sh
:
#!/bin/sh
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.
case "$SSH_ORIGINAL_COMMAND" in
"systemctl restart cups")
systemctl restart cups
;;
"shutdown -r now")
shutdown -r now
;;
*)
echo "Access denied"
exit 1
;;
esac
Luego referencialo ~/.ssh/authorized_keys
con
command="/home/user/.ssh/allowed-commands.sh",…
En el gran SSH, The Secure Shell: The Definitive Guide book de O'Reilly, en el capítulo ocho, hay un buen ejemplo dado usando un script como el siguiente:
#!/bin/sh
/bin/echo "Welcome!
Your choices are:
1 See today's date
2 See who's logged in
3 See current processes
q Quit"
/bin/echo "Your choice:"
read ans
while [ "$ans" != "q" ]
do
case "$ans" in
1)
/bin/date
;;
2)
/usr/bin/who
;;
3)
/usr/bin/top
;;
q)
/bin/echo "Goodbye"
exit 0
;;
*)
/bin/echo "Invalid choice '$ans': please try again"
;;
esac
/bin/echo "Your choice:"
read ans
done
exit 0
Usando esto en su .authorized_keys
archivo como:
command="/path/to/your/script.sh" <ssh-key>
... te da esto cuando haces ssh
:
Welcome!
Your choices are:
1 See today's date
2 See who's logged in
3 See current processes
q Quit
Your choice:
scp
, sftp
y todas las demás cosas que podrían resultarle útiles algún día.
command
opción en general?
Otros enfoques usan, por ejemplo, un shell restringido para el usuario dado o usan un contenedor que restringe los comandos a todos los archivos / scripts que se encuentran en un directorio específico, lo que permite aumentar la lista de comandos sin cambiar el contenedor.
Otro artículo describe un script genérico, que también permite argumentos de línea de comando para los comandos permitidos, pero permite bloquearlos con reglas expresadas como expresiones regulares.
Este ejemplo se expresaría de la siguiente manera:
command="only systemctl shutdown"
Y .onlyrules
se crearían archivos con este contenido:
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
La ventaja de este enfoque 'único' es que no hay necesidad de escribir scripts individuales para cada usuario y situación.
ForcedCommand
SSH_ORIGINAL_COMMAND
(perman sshd
) para que esté disponible en scripts. También para dar un ejemplo de scripts automatizados que permitenSSH_ORIGINAL_COMMAND
ejecutar ciertos patrones de . Ver también unixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html