SSH
¿Qué es SSH?
SSH (o Secure SHell, en español: intérprete de órdenes seguro) es el nombre de un protocolo y del programa que lo implementa cuya principal función es el acceso remoto a un servidor por medio de un canal seguro en el que toda la información está cifrada. Además de la conexión a otros dispositivos, SSH permite copiar datos de forma segura (tanto archivos sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir contraseñas al conectar a los dispositivos y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH y también puede redirigir el tráfico del (Sistema de Ventanas X) para poder ejecutar programas gráficos remotamente.
Funcionamiento
Necesita tres puntos indispensables: usuario, puerto y servidor. El cliente SSH va a contactar con el servidor para iniciar la conexión. Ese servidor está escuchando a través del puerto 22 o el que se le haya asignado. Posteriormente, el servidor va a enviar la clave pública y comienzan a organizar los parámetros y abrir un canal seguro. El cliente inicia sesión para conectarse a ese servidor.
Instalación
En la mayoría de servidores ya viene integrado este servicio, pero en equipos clientes lo podemos instalar con:
sudo dnf install openssh-server ##Para Fedora
sudo apt install openssh-server ##Para Debian y derivadors
Una vez instalado podemos acceder al equipo desde el cliente con el domando:
ssh usuario@IPservidor
Donde «ssh» es la orden, «usuario» es el usuario con el que nos conectaríamos o nos identificaríamos, la @ sirve para indicar la máquina a donde nos conectamos y «IPservidor» sería la IP o el nombre del servidor que nos conectaremos.
Configuración del servicio
El directorio de configuración es:
/etc/ssh
Dentro encontraremos más ficheros y directorios, pero nos centraremos en:
- sshd_config – fichero de configuración de servicio
- sshd_config.d – Directorio adicional de configuraciones
NOTA – a partir de ahora explicaré los parámetros que encontraremos en Fedora o RedHat, aunque en todas las distribuciones debería de ser igual.
El usuario root no puede iniciar sesión
Por seguridad, el usuario root viene bloqueado, ya que es el único usuario que no necesita permiso para realizar acciones y podría modificar todo el sistema. Es por eso que viene bloqueado, pero, igualmente, el parámetro se puede modificar:
PermitRootLogin no
SCP – Copiando entre equipos por SSH
Para realizar transferencias de archivos a través de SCP, es necesario conocer las rutas de los directorios objetivos del anfitrión remoto. A continuación se describen algunas de las opciones más importantes del mandato scp.
Para realizar una copia de ficheros podemos realizar este ejemplo:
scp fichero.txt usuario@servidor:/tmp
En este sencillo ejemplo copiamos el fichero local «fichero.txt» al «servidor» desde el usuario «usuario» al directorio remoto «/tmp«.
Un ejemplo más complejo basado en el puerto modificado:
scp -P22001 -r /opt admin@192.168.100.182:/tmp
En el que copio el directorio «/opt» de mi equipo local al servidor con IP «192.168.100.182» mediante usuario «admin» al directorio «/tmp» remoto. Es decir, con «-P» especifico el puerto remoto, con «r» le digo que es recursivo (el directorio y su contenido).
Al contrario, también sería posible, es decir, copiar un objeto de servidor al cliente:
scp -P22001 -r admin@servidor:/home/admin /tmp
SFTP – Transferencia de ficheros segura
En este caso lo utilizaremos para acceder desde el navegador de ficheros al servidor, solo hay que poner en el explorador correspondente la dirección:
sftp:/192.168.100.182
Donde se pedirá el usuario y contraseña y accederemos a la raiz del sistema. Podemos ahorrar pasos poniendo en la barra:
sftp:/admin@192.168.100.182:22001/tmp
En este ejemplo nos conectamos con el puerto 22001 al equipo 192.168.100.182 con el usuario admin al directorio /tmp.
Conexión con llave digital (sin contraseña)
Como ya he explicado antes, para conectarse al servidor se utilizan llaves digitales entre servidor y el cliente, en caso de que el cliente no tenga una, el servidor le proporciona una temporal que guardará en el directorio local ~/.ssh. Para realizar una «confianza» permanente entre el cliente y el servidor se ha de generar una llave e importarla en el cliente.
Desde el cliente primero nos situamos en el directorio .ssh del usuario:
cd ~/.ssh
Y generamos una llave:
ssh-keygen -t rsa
El asistente primero nos pregunta dónde y qué nombre darle al fichero, lo podemos dejar por defecto:
Generating public/private rsa key pair. Enter file in which to save the key (/home/enrique/.ssh/id_rsa):
Ahora nos pedirá una contraseña:
Enter passphrase (empty for no passphrase): Enter same passphrase again:
Y por último nos confirmará el cambio:
Your identification has been saved in /home/enrique/.ssh/id_rsa Your public key has been saved in /home/enrique/.ssh/id_rsa.pub
Sin salir del directorio ~/.ssh del usuario local, copiaremos la llave generada al servidor destino:
ssh-copy-id -i id_rsa.pub admin@192.168.100.182
Nos pedirá la contraseña del usuario destino (en este caso «admin») y ya habríamos acabado el proceso de transferencia, ahora, la próxima vez que nos conectemos al servidor solo pedirá contraseña una vez, la siguiente entrará directo.
Enlaces
- https://es.wikipedia.org/wiki/Secure_Shell
- https://www.openssh.com/