Servidor y SSH para principiantes

Ruta Servidor

Esta ruta es distinta a HTML, CSS o JavaScript: no vas a escribir código, vas a aprender a moverte por el sitio donde ese código vive de verdad. Empieza aquí si nunca has usado una terminal.

Lección 1 — Qué es un servidor y cómo conectarte por SSH

Un servidor es, por dentro, un ordenador como el tuyo: tiene disco, memoria y un sistema operativo. La diferencia es que está encendido las 24 horas en un centro de datos, no tiene pantalla ni ratón conectados, y tú no estás delante — te conectas a él a través de internet cuando necesitas hacer algo ahí.

Para hablar con un servidor no usas clics: usas una terminal, una ventana de texto donde escribes órdenes (comandos) y el sistema te responde también en texto. Da respeto al principio, pero es solo una conversación con reglas fijas — nada que no puedas aprender.

SSH (Secure Shell) es el protocolo que usas para abrir una terminal en un ordenador que no es el tuyo, de forma cifrada. Es como llamar por un teléfono en el que nadie puede escuchar la conversación, en vez de gritar la contraseña en mitad de la calle. Cuando "te conectas por SSH a un servidor", lo que haces es abrir una terminal remota: escribes ahí y el servidor ejecuta lo que le pides, como si estuvieras sentado delante de él.

terminal
ssh usuario@direccion-del-servidor

La primera vez que te conectas a un servidor nuevo, la terminal te va a preguntar si confías en su "huella" (fingerprint) — es una comprobación de seguridad normal, se acepta escribiendo yes. Después te pedirá una contraseña o usará una clave guardada en tu ordenador, y en cuanto entre verás cambiar el texto de la terminal: eso significa que ya estás dentro, con una sesión abierta en el servidor.

Una vez dentro, estos cuatro comandos son totalmente seguros — no pueden romper nada, solo te informan de dónde estás:

  • pwd — te dice en qué carpeta estás ahora mismo.
  • whoami — te dice con qué usuario has entrado.
  • ls — lista lo que hay dentro de la carpeta actual.
  • exit — cierra la sesión y te devuelve a tu propio ordenador.
terminal
pwd
whoami
ls
exit
💡 Pruébalo tú mismo: conéctate por SSH a un servidor al que tengas acceso y ejecuta, uno a uno, los cuatro comandos de arriba. No tienen forma de estropear nada — están pensados justo para perder el miedo a escribir en una terminal por primera vez.

Lección 2 — Moverte por el sistema de archivos

Un servidor Linux organiza sus archivos igual que el tuyo: carpetas dentro de carpetas. La diferencia es que aquí no hay iconos ni doble clic — te mueves escribiendo la ruta de donde quieres ir. Hay dos formas de escribir una ruta:

  • Ruta absoluta — empieza siempre desde la raíz del sistema, con /: por ejemplo /var/www/httpsdocs. Funciona igual sin importar en qué carpeta estés ahora.
  • Ruta relativa — parte de donde estás ahora mismo: por ejemplo css/estilos.css si esa carpeta está dentro de la actual. Más corta, pero depende de dónde te encuentres.

Para moverte y mirar dentro de las carpetas, estos comandos son tan seguros como los de la lección 1 — solo consultan o cambian dónde estás, no tocan ningún archivo:

  • cd nombre-carpeta — entra en esa carpeta (change directory).
  • cd .. — sube un nivel, a la carpeta que contiene la actual.
  • cd (sin nada detrás) — te lleva directo a tu carpeta personal, sea cual sea tu ubicación.
  • ls -la — como ls de la lección 1, pero mostrando también archivos ocultos (los que empiezan por .) y detalles como el tamaño y los permisos.
terminal
pwd
# /home/eugeni

cd /var/www/httpsdocs
pwd
# /var/www/httpsdocs

ls -la
cd ..
pwd
# /var/www

cd

Dos atajos que vas a usar constantemente: el punto . significa "la carpeta actual" y los dos puntos .. significan "la carpeta de arriba". Se combinan con otros comandos, no solo con cd — por ejemplo, para copiar un archivo a la carpeta donde estás ahora mismo se usa . como destino.

terminal
cp /var/www/httpsdocs/index.html .
# copia index.html a la carpeta donde estás ahora
💡 Pruébalo tú mismo: conéctate por SSH y, desde tu carpeta personal, haz cd a dos o tres carpetas seguidas comprobando con pwd dónde estás en cada paso, luego vuelve atrás con cd .. las veces que haga falta hasta llegar de nuevo a tu carpeta personal. Es la mejor forma de perder el miedo a "perderte" dentro del servidor.

Lección 3 — Ver, editar y dar permisos a archivos

En las lecciones 1 y 2 solo mirabas dónde estabas. Ahora tocan los primeros comandos que sí interactúan con archivos — siguen siendo seguros si los usas como se explica aquí, pero ya conviene ir con algo más de atención.

Para ver el contenido de un archivo de texto sin abrir ningún editor, dos comandos de solo lectura:

  • cat nombre-archivo — vuelca todo el archivo en pantalla de golpe. Bien para archivos cortos.
  • less nombre-archivo — lo abre página a página, con las flechas para moverte. Sales con la tecla q. Mejor para archivos largos, como los logs.
terminal
cat index.html
less error.log
# flechas para moverte, "q" para salir

Para editar un archivo directamente en el servidor (sin FTP ni VS Code de por medio), el editor más sencillo para empezar es nano — no el más potente, pero el que menos sorpresas da a quien nunca ha usado un editor de terminal.

terminal
nano index.html

Dentro de nano, los atajos van con Ctrl y se muestran abajo del todo en pantalla. Los dos que necesitas para empezar:

  • Ctrl + O — guarda el archivo (Write Out); pulsa Enter para confirmar el nombre.
  • Ctrl + X — sale de nano. Si hay cambios sin guardar, te pregunta antes de cerrar.

Cada archivo en un servidor Linux tiene también unos permisos: quién puede leerlo, escribirlo o ejecutarlo. Se ven al final de cada línea con ls -la (la de la lección 2), como una cadena de diez caracteres:

terminal
-rw-r--r--  1 egv  egv  1240 ago 17 10:02 index.html

Ese bloque -rw-r--r-- se lee en tres grupos de tres: propietario, grupo y "todos los demás", cada uno con read, write y execute (un guion significa que ese permiso no está). Para cambiarlos se usa chmod, casi siempre con un número de tres cifras — cada cifra suma 4 (leer) + 2 (escribir) + 1 (ejecutar):

terminal
chmod 644 index.html
# 6 = rw- (propietario puede leer y escribir)
# 4 = r-- (grupo solo puede leer)
# 4 = r-- (resto solo puede leer)

chmod 755 script.sh
# el propietario además puede ejecutarlo
⚠️ Con chmod, cuidado de verdad: a diferencia de los comandos de las lecciones 1 y 2, este sí puede romper cosas — dar permisos de más a un archivo (o tocar permisos en carpetas del sistema) es una forma clásica de crear un agujero de seguridad. Practica solo sobre archivos tuyos de prueba, nunca sobre carpetas de configuración del servidor si no sabes exactamente qué hace ese archivo.
💡 Pruébalo tú mismo: crea un archivo de prueba con nano prueba.txt, escribe una línea, guarda con Ctrl + O y sal con Ctrl + X. Luego haz ls -la para ver sus permisos por defecto, y compáralos con los de otro archivo de la misma carpeta.

Lección 4 — Procesos, logs y servicios en marcha

Un servidor no solo guarda archivos: tiene programas en ejecución ahora mismo — el servidor web, la base de datos, tu propia sesión SSH. Cada uno de esos programas en marcha es un proceso. Para ver todos los que hay activos, se usa ps aux:

terminal
ps aux
# USER   PID  %CPU %MEM  COMMAND
# www    412  0.3  1.2   nginx
# mysql  588  1.1  4.5   mariadbd
# egv    901  0.0  0.1   -bash

La columna PID (process ID) es el número que identifica a cada proceso — lo necesitarás más adelante si algún día tienes que actuar sobre uno en concreto. Como esa lista suele ser larga, se combina con grep, un comando que filtra un listado y deja solo las líneas que contienen lo que le pidas:

terminal
ps aux | grep nginx
# el símbolo | ("pipe") pasa el resultado de un comando
# como entrada del siguiente — aquí, filtra ps aux por "nginx"

Para ver esa misma información pero en vivo, actualizándose sola, se usa top — muestra los procesos que más CPU o memoria están usando en cada momento, ordenados de mayor a menor. Se sale con la tecla q, igual que con less en la lección 3.

terminal
top
# se actualiza solo cada pocos segundos
# "q" para salir

Cuando algo no funciona como esperas, la primera pregunta suele ser "¿qué ha pasado?" — y la respuesta casi siempre está en un log, un archivo de texto donde un programa va apuntando lo que hace. Ya sabes leerlos con cat y less (lección 3), pero para vigilar un log mientras se van añadiendo líneas nuevas en tiempo real, se usa tail -f (follow):

terminal
tail -f /var/log/nginx/error.log
# se queda "enganchado" mostrando cada línea nueva
# Ctrl + C para salir (no "q" esta vez)

Es el comando que se usa para, por ejemplo, recargar una página en el navegador y ver al momento en la terminal si el servidor ha registrado algún error. Por último, para saber si un servicio concreto (el servidor web, la base de datos...) está activo o caído, systemctl status — de solo lectura si no le añades nada más:

terminal
systemctl status nginx
# ● nginx.service - A high performance web server
#    Active: active (running) since...
⚠️ Hasta aquí, solo consulta: todo lo de esta lección lee información, no la cambia — es totalmente seguro. systemctl también permite start, stop y restart para arrancar o parar un servicio, pero eso puede tumbar una web o una base de datos en producción si no sabes exactamente qué haces y quién depende de ese servicio ahora mismo. Queda para una lección futura, con más contexto.
💡 Pruébalo tú mismo: conéctate por SSH a un servidor al que tengas acceso, ejecuta ps aux | grep nginx (o el nombre del servicio que sepas que corre ahí) y luego systemctl status sobre ese mismo servicio. Compara la información de los dos comandos — verás que se complementan.