Uno de los puntos más importantes a la hora de elegir un alojamiento es analizar qué tipo de plan se ajusta mejor a las necesidades, por lo general, el plan de hosting más adecuado para la mayoría de los sitios web pequeños y/o medianos es, sin dudas, el hosting compartido, tanto por un tema de costos como por la facilidad de gestión. Un problema a que a menudo presentan este tipo de servicios es la falta de SSH, incluso en paneles como cPanel que lo integran nativamente, sin embargo existen formas de ejecutar comandos SSH en cPanel aunque no tengamos habilitada la función de Terminal.
Contenido
La falta de SSH en cPanel
Un VPS, además de ser ligeramente más caro que un plan compartido, también requiere un mayor conocimiento de sistemas, ya que es necesario instalarlo y configurarlo desde cero para ponerlo en funcionamiento, así mismo, contar con un panel de control como cPanel implica costos adicionales y, a largo plazo, consume tiempo de mantenimiento, ya que es necesario estar pendiente de la seguridad, las actualizaciones, el monitoreo y otras responsabilidades de gestión.
Dado que la gran mayoría de los sitios no genera suficiente tráfico como para requerir los recursos y la potencia de un servidor VPS en la nube o de un servidor dedicado, el hosting compartido se convierte en la opción más acertada. Este tipo de plan es mucho más económico y viene listo para usar, ya que incluye un panel de control que permite gestionar todo lo necesario, además de que toda la responsabilidad sobre la gestión del servidor recae en el proveedor, permitiendo al cliente centrarse únicamente en su negocio.
Si bien los planes compartidos facilitan enormemente la gestión de un sitio web o un proyecto, existe una característica de la que suelen carecer, principalmente por un tema de seguridad, y eso es el acceso SSH o Terminal. Se trata de una característica que puede ser peligrosa si no se administra correctamente y por el perfil de los sitios que hacen uso de hosting compartido se hace innecesario en la mayoría de los casos, sin embargo, dependiendo del tipo de proyecto, puede ser necesario ejecutar algunos comandos, lo que lleva a algunos dueños de sitios a migrar a un servidor en la nube o a un dedicado, con toda la complejidad que ello implica.
Aun así, existen alternativas para ejecutar comandos SSH en cPanel, incluso en un plan de hosting compartido que no incluya acceso a Terminal. La solución más sencilla consiste en crear un cron que se encargue de verificar si hay comandos por ejecutar y, finalmente, los ejecute.
Configuración previa
El primer paso es ingresar a cPanel e ir al Administrador de Archivos, una vez dentro, se debe crear un archivo de texto haciendo clic en “Archivo”, ubicado en la esquina superior izquierda del Administrador de Archivos de cPanel.
Al hacer esto, aparecerá el menú “Archivo nuevo”, donde se deberá colocar el nombre del archivo. En este caso, se utilizará run.sh, tal como se muestra en la imagen:
Una vez creado, aparecerá el archivo dentro de la carpeta principal y sobre él se debe pulsar el botón derecho del mouse para abrir el menú, donde se debe seleccionar Edit:
Primero se abrirá una segunda ventana donde se debe seleccionar Editar y una vez que el editor se haya abierto se debe colocar el siguiente código:
#!/bin/bash if [ -s ~/execute_commands ]; then mv ~/execute_commands ~/running.cmd chmod +x ~/running.cmd bash ~/running.cmd >> ~/run.log 2>&1 rm ~/running.cmd fi
Una vez pegado el código, se debe hacer clic en el botón Guardar Cambios, ubicado en la parte superior derecha, y luego en el botón Cerrar, que se encuentra al lado.
Tras realizar esto, se mostrará nuevamente la lista de archivos, al igual que se hizo al momento de editar, se debe seleccionar nuevamente el archivo y hacer clic con el botón derecho del mouse, en el menú desplegado, se deberá seleccionar la opción Change Permissions y establecer el valor en 755.
Una vez asignados los permisos, se debe hacer clic en el botón «Cambiar permisos» para guardar los cambios.
Por último, se debe configurar un cron y para ello, desde la pantalla principal de cPanel, se selecciona la opción Trabajos de cron, en la sección Añadir nuevo trabajo de cron, se añade la tarea para que se ejecute cada minuto de la siguiente forma:
* * * * * bash ~/run.sh > /dev/null 2>&1
Si el script ha sido renombrado o se ha movido de ubicación, es importante actualizar su ruta en el cron para que funcione correctamente.
Una vez configurado el cron, bastará con crear un archivo llamado execute_commands en el directorio raíz de cPanel cada vez que desees ejecutar comandos, de este modo, en menos de un minuto, estos comandos serán procesados automáticamente, toda la salida de su ejecución se guardará en el archivo run.log, ubicado también en el directorio raíz.
Aunque el script puede parecer más complejo de lo necesario, esta estructura tiene una razón clara: evitar ejecuciones duplicadas. Dado que el cron está configurado para ejecutarse cada minuto, si los comandos tardan más de un minuto en completarse, existe el riesgo de que la siguiente ejecución del cron intente procesar nuevamente el mismo archivo, generando conflictos.
Para prevenirlo, el script renombra primero el archivo antes de ejecutarlo, garantizando que cada conjunto de comandos se ejecute una sola vez de forma segura.
Ejecutar comandos SSH en cPanel sin Terminal
El archivo execute_commands es donde se deben colocar los comandos que se desean ejecutar. Se crea de la misma forma en que se creó el primer archivo llamado run.sh, con la diferencia de que, en este caso, no es necesario ajustar los permisos, ya que el propio run.sh se encargará de hacerlo.
Por ejemplo, si se quiere ejecutar Artisan y se está usando PHP 8.2, se puede colocar en execute_commands lo siguiente:
cd ~/public_html /opt/cpanel/ea-php82/root/usr/bin/php /opt/cpanel/composer/bin/composer install --no-interaction
Si en lugar de instalar se quiere quiere actualizar Composer, se puede usar:
cd ~/public_html /opt/cpanel/ea-php82/root/usr/bin/php /opt/cpanel/composer/bin/composer update --no-interaction
Las rutas de PHP y Composer pueden cambiar según el servidor, ante la duda siempre es mejor consultar con el soporte del proveedor cuáles son las rutas correctas que corresponden a la versión de PHP en uso.
Si en lugar de ejecutar la versión 8.2 se quiere otra versión, simplemente se cambia el número, por ejemplo para PHP 7.4:
/opt/cpanel/ea-php74/root/usr/bin/php
También se puede agregar parámetros, por ejemplo para que establecer el memory_limit como ilimitado:
/opt/cpanel/ea-php82/root/usr/bin/php -d memory_limit=-1 /opt/cpanel/composer/bin/composer update --no-interaction
Tampoco hay límite en la cantidad de parámetros:
/opt/cpanel/ea-php82/root/usr/bin/php \ -d memory_limit=-1 \ -d max_execution_time=0 \ -d upload_max_filesize=512M \ -d post_max_size=512M \ -d error_reporting=E_ALL \ -d display_errors=1 \ /opt/cpanel/composer/bin/composer update --no-interaction
Por supuesto esto no se limita a Artisan, pueden ejecutarse cualquier comando, aunque no hay que olvidar que los comandos no deben requerir intervención del usuario, es decir, debe ejecutarse totalmente desatendido.
Conclusión
En definitiva, en muchos casos los clientes piensan equivocadamente que necesitan un VPS o un servidor dedicado como única alternativa para el uso de Terminal. Sin embargo, el salto a este tipo de servicios implica mayores responsabilidades de administración, para las cuales se requieren conocimientos técnicos más avanzados, tiempo y/o dinero.
Por otro lado, el hosting compartido resulta ser la mejor opción para sitios web pequeños y medianos incluso en los casos en que se necesite acceso a una Terminal, ya que es económico, fácil de usar y de bajo mantenimiento, debido a que el proveedor se encarga de la mayoría de las tareas de gestión del servidor.
Para quienes valoran la facilidad de gestión del hosting compartido, pero necesitan ejecutar comandos SSH en cPanel de manera esporádica, existe la opción intermedia de configurar un cron que se encargue de la ejecución. Esto permite programar la ejecución de comandos sin requerir acceso directo a la terminal, a través una simple automatización de tareas, sin necesidad de migrar a un entorno más complejo, de este modo, se mantiene la comodidad y facilidad de gestión que ofrece un plan compartido.