Hoy voy a empezar a trastear con un servidor y a montarlo desde cero. Mi idea es hacerlo primero con Docker (me ahorro instalación de binarios, dependencias y detalles que seguramente se me escaparán) y más adelante, cuando tenga más claras las cosas básicas, intentar hacer lo mismo sin Docker.
Intentaré plasmar lo que hago aquí a modo de diario y forma de terminar de entender y fijar lo que hago, así como para futuras referencias para mi mismo.
Entrando al servidor
Es un Ubuntu 22.04, he ido a lo fácil según recomendaciones que he leído… Ubuntu es lo más sencillo y como además uso Ubutnu de escritorio, imagino que lo veré más familiar todo.
Qué quiero ver hoy: Hoy solo quiero ver maneras de entrar más fácilmente al servidor y enterarme de ficheros básicos de configuración del mismo a nivel de acceso.
¿Cómo entro al servidor por ssh?
Me dan una IP, un usuario (root) y una clave. Con el comando siguiente me logeo:
ssh username@remote_host
Pero no quiero estar poniendo mi clave cada vez, ni teniendo que recordar la ip para logearme. Para ello seguimos estos pasos.
1: Generar la key pública y privada
¿Cómo lo hago? En nuestra consola ejecutamos:
ssh-keygen
Nos preguntará dónde queremos guardar el par de claves privada/pública, que por defecto es en ~/.ssh y se llaman por defecto: la privada id_rsa y la pública id_rsa.pub
También preguntará por una contraseña, que de momento pasamos.
La clave privada debe permanecer siempre en el cliente (mi ordenador).
La clave pública puede ser compartida sin problemas, y debe ser subida al servidor en cuestión en ~/.ssh/authorized_keys para poder autenticarnos (mediante el uso de nuestra clave privada).
La clave pública se usa para encriptar mensajes que solo la clave privada puede desencriptar.
2: Copiar la clave pública al servidor
* IMPORTANTÍSIMO: la clave privada permanecerá siempre en el cliente (nuestro ordenador) *
Método fácil:
ssh-copy-id username@remote_host
(username y remote_host son el usuario y la ip/dominio de nuestro servidor, normalmente en este punto el usuario será root)
Esto copiará el contenido de ~/.ssh/id_rsa.pub por defecto (si hemos usado otro nombre, hay que especificarlo en el comando), en el servidor en el fichero ~/.ssh/authorized_keys
Método manual (el comando ssh-copy-id hace esto realmente):
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Esto hará lo mismo: cat leerá id_rsa.pub, el output lo pasamos a ssh donde nos logeamos con nuestras credenciales y a ssh le pasamos un comando a ejecutar, el mkdir para crear el directorio .ssh y la combinación de cat y >> insertamos nuevo contenido en el fichero (el contenido de id_rsa.pub).
O también podemos una vez logeados en el servidor y con la clave pública copiada en el portapapeles:
echo clave_publica >> ~/.ssh/authorized_keys
3: Probar que funciona
Simplemente ejecutando
ssh username@remote_host
Deberíamos logearnos, sin pedir contraseña. Esto es que ha funcionado.
4: Deshabilitar el inicio de sesión por contraseña
Tenemos que editar el archivo /etc/ssh/sshd_config
sudo vim /etc/ssh/sshd_config
Buscamos PasswordAuthentication y lo setamos a no, quedando la línea así:
PasswordAuthentication no
Normalmente habrá que reiniciar el servicio de ssh
sudo systemctl restart ssh
5: Guardar esta conexión para logearme más fácilmente
Editamos en nuestro ordenador, el fichero ~/.ssh/config/ de la siguiente forma
Host nombreserver
User username
HostName ipserver
IdentityFile ~/.ssh/id_rsa
Port 22
- Host contendrá el «alias» que usemos para esta conexión
- IdentityFile podemos obviarlo si hemos usado el nombre por defecto para la clave pública
- Port podemos obviarlo si usamos el 22 que es el puerto por defecto
Las siguientes conexiones a este servdor serán con
ssh nombreserver
No pedirá contraseña, no habrá que acordarse de la IP ni del user
¿Y ahora qué?
Ahora toca instalar nginx… o mejor dicho antes instalar Docker y luego nginx, y configurarlo claro.