Los 15 comandos SSH esenciales para administrar servidores Linux
La conexión SSH nos permite acceder a un servidor de manera segura, y además trabajar en el mismo (o incluso entre 2 servidores) de forma remota, por lo que es una herramienta muy potente. Una vez que iniciemos sesión, podremos trabajar en el servidor y es aquí donde entran en juego los comandos SSH, que nos permitirán realizar tareas en el propio servidor, transferir datos, etc.
Hay multitud de comandos SSH e incluso podemos combinarlos, lo que nos da una funcionalidad enorme (especialmente si lo comparamos con las opciones que nos ofrece la interfaz gráfica, que generalmente, son más reducidas).
Antes de lanzarnos a ejecutar comandos SSH, es importante valorar que requiere ciertos conocimientos y, si estamos comenzando a familiarizarnos con este tipo de gestiones, hacerlo en servidores ‘de prueba’ o que no contengan información sensible o valiosa (y trabajar siempre con una copia de seguridad previa), ya que un comando mal ejecutado puede eliminar contenido o incluso dejar el servidor inoperativo, por lo que es un buen momento para tener en cuenta la frase ‘un gran poder conlleva una gran responsabilidad’.
- Cómo conectarnos por SSH
- Comandos de utilidad para gestionar servidores por SSH
- Comando ‘man’
- Comando ‘clear’
- Comando ‘exit’
- Comando ‘who’
- Comando ‘strace’
- Comando ‘sudo’
- Comando ‘touch’
- Comando ‘uptime’
- Comando ‘nohup’
- Comando ‘systemctl’
- Comando ‘wget’
- Comando ‘scp’
- Comando ‘watch’
- Comando ‘killall’
- Comando ‘reboot’
Cómo conectarnos por SSH
Para poder conectar por SSH a un servidor, necesitaremos disponer de los datos de acceso de este acceso (normalmente, diferentes a los del área de clientes u otros accesos).
Habitualmente nos conectaremos con el usuario root, ya que es posible que otros usuarios no dispongan de acceso SSH, pero el acceso se haría de igual modo independientemente del usuario utilizado.
Lo que sí debemos tener en cuenta es el sistema operativo que utilizamos para conectarnos, ya que, dependiendo de esto, es posible que necesitemos algún programa a mayores y/o los comandos puedan variar. Puedes ver cómo acceder desde los diferentes SO en este apartado de otro de nuestros artículos: https://raiolanetworks.com/blog/ssh/#como-acceder-por-ssh
Comandos de utilidad para gestionar servidores por SSH
Realmente hay muchos más comandos que los que vamos a ver en este artículo, y escoger unos u otros dependerá también de lo que necesitemos comprobar, las tareas que vayamos a realizar, etc.
En algunos ejemplos del artículo se especificarán rutas o directorios de ejemplo. Cuando vayamos a lanzar el comando en nuestro servidor debemos asegurarnos de cambiar los nombres por los correspondientes y usar las rutas correctas (esto incluye rutas absolutas o relativas).
Comando ‘man’
Este comando puede ser el más sencillo y a la vez el más útil, su función es darnos la ‘ayuda’ de otros comandos. Esto hace que por sí solo no tenga una función elaborada, no lanza ningún proceso, no nos permite abrir la consola de base de datos ni nada similar, pero puede facilitarnos una información muy valiosa si en algún momento necesitamos refrescar cómo ejecutar algún comando o las opciones del mismo.
Para utilizarlo, simplemente debemos escribir man y el comando cuyo funcionamiento queremos saber, por ejemplo, para un ‘cp’:
man cp

Comando ‘clear’
Al igual que el anterior, es sumamente sencillo, pero puede ayudarnos especialmente a nivel visual o para organización: lo que hace es eliminar todo el contenido de la pantalla del terminal, no lo borra del historial, pero esa ventana nos quedará sin ningún contenido y para organizarnos puede sernos de ayuda, si, por ejemplo, hemos abierto un log y queremos que no nos aparezca en la pantalla su contenido porque vamos a abrir otro nuevo.
Para ejecutarlo basta con hacerlo simplemente en una nueva línea:
clear
Comando ‘exit’
Aunque podemos cerrar la ventana de la terminal directamente, al igual que debemos conocer cómo podemos iniciar una sesión SSH, es importante conocer también el comando para cerrar la sesión que estamos utilizando, no es necesario ejecutar opciones adicionales, la sintaxis es:
exit
Comando ‘who’
Con este comando podemos ver las sesiones SSH que hay activas en ese momento, además de la fecha/hora de inicio y la IP desde la que se realizan.
Esto puede sernos útil para comprobar los accesos a nuestro servidor, especialmente si detectamos algún acceso malicioso o no legítimo.

Comando ‘strace’
El comando ‘strace’ nos permite ver las llamadas que realiza una aplicación. Para la gestión de servidores, puede sernos de especial utilidad para monitorizar procesos, con la siguiente sintaxis:
strace -p PID
Esto nos permitirá seguir todo lo que realiza ese proceso, y en casos donde exista algún bucle u otro error, puede ayudarnos a depurar la información asociada.
Para conocer el PID de un proceso, podemos ejecutar ‘ps aux’ y de esta forma podemos buscar el proceso, ya sea por usuario, tiempo de ejecución, etc.
Con ese mismo comando, podemos ayudarnos de ‘grep’ para filtrar por usuario por ejemplo, con: ps aux | grep USER
Comando ‘sudo’
Si accedemos al servidor como root no necesitaremos hacer uso de este comando, no obstante, si accedemos con otro usuario, sí necesitaríamos hacer uso del mismo, ya que nos permitirá ejecutar comandos con privilegios de un usuario root, pero de forma temporal (no da a otro usuario permisos adicionales).
Para ejecutarlo, únicamente tendríamos que escribir: sudo COMANDO_A_EJECUTAR, por ejemplo, si queremos copiar un archivo a un directorio sobre el que el usuario que estamos utilizando no tiene permisos de edición, podemos ejecutar lo siguiente:
sudo cp FICHERO.TXT /root/
Para poder ejecutarlo necesitaremos introducir la contraseña de root, por lo que debemos conocerla para poder hacer uso de este comando.
La autorización con el comando sudo es temporal, por lo que es posible que nos solicite la contraseña de nuevo para volver a ejecutar otro comando con sudo.
A diferencia del comando ‘su’, cuando utilizamos ‘sudo’ únicamente se lanza ese comando como superusuario, no cambia la sesión a superusuario, por lo que si no queremos trabajar con permisos root por ejemplo, el uso de ‘sudo’ puede resultarnos más seguro.
Comando ‘touch’
Este comando nos sirve principalmente para 2 tareas: crear un archivo o cambiar la fecha de modificación/acceso. La base sería:
touch [opciones] [archivo]
Para crear un archivo vacío, únicamente tendríamos que ejecutar: touch fichero.txt (cambiando fichero.txt por el nombre correspondiente que queramos asignarle). Si ese fichero ya existe, lo que hará touch es modificar la fecha/hora de creación por la actual.
Si queremos modificar la fecha/hora de creación por una específica en vez de la actual, podemos hacerlo con: touch -t TIMESTAMP, donde tendríamos que utilizar el siguiente formato: AAAAMMDDhhmm.ss, por ejemplo para el 24 de Diciembre de 2024 a las 23:30:45 tendríamos que utilizar:
touch -t 202412242330.45 fichero.txt

En caso de que no queramos que se cree el fichero si no existe, podemos ejecutar: touch -c fichero.txt (de forma que cambiará la fecha/hora de creación si fichero.txt existe, pero si no existe, no lo creará vacío).
Comando ‘uptime’
Con uptime podemos ver el tiempo que el servidor ha estado activo desde el último apagado o reinicio. También nos muestra el número de usuarios conectados en ese momento (la hora actual también se muestra) y la carga media de los últimos: 1, 5 y 15 minutos, por ese orden.
Con este comando podemos verificar si nuestro servidor se ha apagado o reiniciado, para comprobar por ejemplo si sufre de reinicios de forma repetida y si es necesario revisar algún otro aspecto como el consumo de recursos o la carga del mismo.

Comando ‘nohup’
Si necesitamos que alguno de los comandos ejecutados continúe ejecutándose independientemente de que cerremos la sesión de terminal que estamos utilizando, podemos utilizar el comando nohup.
Podemos ejecutarlo del siguiente modo: nohup COMANDO, y en caso de que queramos continuar haciendo uso de esa sesión de terminal, podemos lanzarlo a segundo plano con &:
nohup COMANDO &
Si, por ejemplo, necesitamos crear un .zip de un directorio cuyo tamaño es bastante elevado y, por tanto, puede tardar en completarse más tiempo del que vamos a tener la sesión abierta, y además queremos seguir usando esa misma terminal sin iniciar sesión de nuevo, podemos hacerlo del siguiente modo:
nohup zip -r archivo_zip.zip directorio_a_comprimir/ &
Comando ‘systemctl’
Este comando (o conjunto de comandos) nos permite gestionar los principales servicios del servidor, incluyendo iniciarlos, detenerlos o reiniciarlos, por ejemplo; además de proporcionar información sobre el estado de los servicios, lo que puede sernos de utilidad si por ejemplo estamos experimentando problemas para iniciar el servidor o alguno de los servicios del mismo.
El comportamiento por defecto cuando lo utilizamos para listar los servicios del servidor, es mostrar los que estén activos, por lo que podemos utilizar systemctl list-units --type=service para ello, o añadir --all si queremos verlos todos, incluyendo los que están inactivos.
En los siguientes ejemplos vamos a utilizar el servicio ‘nginx’ para ejecutar el comando, pero podemos ejecutarlo con cualquier otro servicio o aplicación del servidor, cambiándolo por el nombre correspondiente:
- Para comprobar el estado actual del servicio: systemctl status nginx
- Para reiniciar el servicio: systemctl restart nginx
- Para detener el servicio: systemctl stop nginx
Comando ‘wget’
Wget nos permite descargar contenido a través de HTTP, HTTPS o FTP. Nos puede ser útil para descargar aplicaciones para su instalación, archivos que estén accesibles de forma pública o incluso contenido desde otros servidores si contamos con las credenciales correspondientes.
Si, por ejemplo, queremos descargar un plugin de WordPress del repositorio directamente en el servidor, podemos buscar el enlace de descarga en el repositorio y hacerlo con wget:
wget https://downloads.wordpress.org/plugin/elementor.3.32.4.zip
Esto nos descargará ese .zip a nuestro servidor directa y posteriormente podremos descomprimirlo para trabajar con el mismo.
Comando ‘scp’
El comando scp nos permite transferir archivos entre sistemas de forma segura. Podemos utilizarlo para transferir contenido entre 2 servidores remotos y también para subir contenido de local a un servidor remoto, o descargarlo a local desde un servidor remoto.
Para ejecutarlo, la sintaxis base sería la siguiente:
scp [opciones] [origen] [destino]
En las opciones especificaremos las opciones adicionales para realizar el scp: si queremos mover el contenido de un directorio de forma recursiva, utilizaremos -r, o -P si necesitamos especificar un puerto diferente al estándar para este proceso (por defecto utilizará el puerto 22 y, salvo que tu servidor esté configurado para utilizar otro, no sería necesario definirlo).
Por ejemplo, si queremos mover el contenido de un directorio desde un servidor al servidor en el que tenemos la terminal activa, podemos utilizar:
scp -r root@IP_ORIGEN:/RUTA_DIRECTORIO_ORIGEN/ RUTA_DESTINO
Para ello necesitaremos saber la IP del servidor de origen, la contraseña del usuario root (o de otro con permisos suficientes, en cuyo caso utilizaremos ese usuario en vez de root en el comando) y la ruta del contenido en origen.
En destino, podemos especificar la ruta exacta, o si es el propio directorio en el que estamos trabajando, utilizar un ‘.’: scp -r USUARIO@IP_ORIGEN:/RUTA_DIRECTORIO_ORIGEN/ .
Para mover un fichero de local al servidor, sería similar al siguiente:
scp archivo_local usuario@IP_DESTINO:/DIRECTORIO_DESTINO/

Comando ‘watch’
Este comando nos permite seguir la evolución de otro comando, con actualizaciones periódicas. Puede sernos de utilidad si necesitamos monitorizar el crecimiento de un fichero o directorio para ver cómo evoluciona el espacio en disco que ocupa, u otros aspectos como la evolución del consumo de memoria.
El intervalo de actualización por defecto es cada 2 segundos, no obstante, podemos cambiarlo con el parámetro -n segundos. La sintaxis básica sería:
watch [opciones] [comando]
Por ejemplo: hemos detectado un fichero .log en nuestro servidor que crece de forma muy rápida, y tras realizar unos cambios para intentar solventarlo, queremos ver cómo evoluciona el tamaño del fichero, podemos lanzar un watch (que se actualice en este caso cada 30 segundos):
watch -n 30 'du -sh fichero.log'
Comando ‘killall’
Este comando puede ser un arma de doble filo, ya que si bien tiene mucho potencial para sacarnos de un apuro en algunos momentos, también es uno de esos comandos que no debemos ejecutar salvo que estemos muy seguros de lo que estamos haciendo.
A diferencia del comando ‘kill’, que nos solicita el PID de un proceso, killall nos permite matar todos los procesos coincidentes con determinados patrones.
- killall - termina todos los procesos en segundo plano.
- killall -u USUARIO - Termina todos los procesos que pertenezcan a ese usuario.
- killall NOMBRE - Termina todos los procesos coincidentes con ese nombre (habría que sustituirlo por el correspondiente).
Para ejecutarlo con más seguridad, podemos utilizar la forma interactiva, que nos preguntará si queremos terminar el proceso antes de ejecutarse; para ello podemos utilizar la opción -i, por ejemplo, para terminar todos los procesos asociados al usuario ‘csf’ pero preguntando antes de hacerlo:
killall -i -u csf

Comando ‘reboot’
En ocasiones, puede que necesitemos reiniciar el servidor, ya sea porque se está produciendo algún problema en ese momento, para aplicar actualizaciones o cambios en la configuración, etc.
Es importante tener en cuenta que, al realizar esto, podemos estar interrumpiendo algún proceso que se esté ejecutando en ese momento, por lo que, salvo que sea necesario realizarlo de forma inmediata, es conveniente realizarlo de forma programada y, por ejemplo, en horas de menor tráfico.
Podemos reiniciar el servidor con el comando:
reboot