Algo muy útil, si desarrollamos un proyecto DIY con una Raspberry Pi es poder acceder a la misma de manera remota. Se puede dar el caso de un mal funcionamiento, que queramos modificar el código implementado o el motivo que sea. Por eso mismo te vamos a explicar qué es SSH y cómo configurarlo en tu Raspberry Pi.
Índice de contenidos
Es un protocolo de comunicaciones seguras entre dos sistemas basado en una arquitectura de cliente/servidor. Secure Shell (SSH) permite a los usuarios conectarse a un host de manera remota. Se diferencia de otros protocolos de comunicación como FTP o Telnet, en que SSH realiza una encriptación de la conexión. Esto impide a un observador malicioso que monitorice la comunicación obtener contraseñas y otros datos, ya que la información está encriptada.
La fortaleza de la Raspberry Pi es que la podemos usar para cualquier tipo de proyecto. Podemos usarla para crear un sistema de riego automatizado para un cultivo cualquiera. Es posible que queramos conocer desde nuestra casa si el sistema está funcionando o pararlo si está lloviendo. No tenemos que desplazarnos físicamente, sencillamente nos podemos conectar de manera remota y realizar los ajustes que queramos.
SSH lo que nos permite es acceder de manera remota a nuestra Raspberry Pi de manera segura, siempre que esté en la misma red. La comunicación entre los dos puntos es sencilla, ya que hemos activado la función y además, segura. Cualquiera que pudiera estar monitorizando la comunicación con intenciones maliciosas no podrá robarnos las credenciales de acceso.
Vamos ahora a configurar SSH para acceder de manera remota a nuestra Raspberry Pi.
Aunque parezca obvio, debemos asegurarnos que la Raspberry Pi está conectada de manera correcta. Si estamos usando una red inalámbrica, podemos habilitarlo mediante interfaz de usuario o bien mediante línea de comandos. Esto también podemos hacerlo mediante conexión por cable al router, si queremos.
Necesitaremos además la dirección IP de la red para conectarnos posteriormente. PAra ello lanzamos el comando ifconfig que nos mostrara el estado actual de la red, donde también nos muestra la dirección IP. Podemos usar también hostname -I para que nos muestre todas las direcciones IP que están asociadas al dispositivo.
El sistema operativo Raspberry Pi OS tiene el servicio SSH deshabilitado de manera predeterminada. Para habilitarlo, debemos realizar los siguientes pasos desde el escritorio:
Podemos hacerlo también mediante terminal
Alternativamente podemos usar «systemctl» para iniciar el servicio
sudo systemctl enable ssh sudo systemctl start ssh
Cuando habilitamos SSH en una Raspberry Pi que tenga conexión a internet, es importante cambiar la contraseña predeterminada para garantizar la seguridad.
No es necesario que la Raspberry Pi esté conectada para la habilitación del SSH. Podemos hacerlo colocando un archivo de nombre «ssh», sin extensión alguna, en la partición de arranque de una tarjeta SD desde otro dispositivo. Cuando se inicie la Raspberry Pi realiza una búsqueda del archivo «ssh». Si encuentra el archivo, el SSH pasará a habilitarse y el archivo se suprimirá. Lo que haya dentro del archivo no importa en absoluto, pudiendo estar completamente vacío.
Si instalamos el sistema operativo Raspberry Pi OS en una tarjeta SD en blanco, veremos que existen dos particiones. La más pequeña de ambas es la partición de arranque. Debemos añadir el archivo «ssh» a esta partición.
El SSH está integrado de manera nativa en las distribuciones de Linux y MacOS, siendo una función opcional en Windows 10. Para sistemas operativos móviles (iOS y Android) necesitaremos usar clientes SSH de terceros. A continuación te explicaremos como configurarlo en los sistemas operativos más habituales.
Podemos utilizar SSH para conectarnos a una Raspberry Pi desde cualquier ordenador que tenga instalado Windows 10. Es necesario que tenga instalada la actualización Octubre 2018 o posterior, para no tener que usar clientes de terceros.
Si no tenemos instalado el SSH en Windows 10, podemos hacerlo de manera sencilla siguiendo estos pasos:
Para conectarnos a la Raspberry Pi, necesitamos saber la dirección IP de la misma, si no la tenemos. Si aún no la tenemos, escribimos en el terminal de la Raspberry Pi el texto hostname -I. En caso de estar usando una Raspberry Pi sin conexión, podemos mirar la lista de dispositivos conectados al router.
Ahora para conectarnos a la Raspberry Pi desde un ordenador con Windows 10 debemos usar el comando que os podremos a continuación. Debes cambiar el texto <IP> por la dirección IP de nuestra Raspberry Pi.
ssh pi@<IP>
Si hemos configurado un nombre de usuario diferente para nuestra Raspberry Pi, deberemos cambiar el encabezado pi por nuestro nombre de usuario. Por ejemplo: ssh usurio@xxx.xxx.x.x
Pueden pasar ahora dos cosas:
Nos podemos encontrar con el caso que la Raspberry Pi esté usando una dirección IP a la que el ordenador se haya conectado anteriormente. Esto podría reflejar en pantalla una advertencia que nos pide que borremos el registro de la lista de dispositivos conocidos. Debemos seguir las instrucciones y volver a realizar los pasos de ssh para tener éxito.
Si todo sale bien, se nos pedirá el usuario y la contraseña de la Raspberry Pi a la que tratamos conectar. Este usuario y contraseña es importante cambiarlo por seguridad. El usuario predeterminado para una Raspberry Pi es pi y la contraseña predefinida es raspberry.
Ahora nos debería aparecer una línea de comando. El identificador de la Raspberry Pi será el mismo que en nuestra placa. Si lo hemos cambiado, el identificador será el mismo que hemos introducido, si no lo hemos cambiado, será pi.
pi@raspberrypi ~ $
Ya estamos conectados de manera remota a la Raspberry Pi y podemos empezar a introducir comandos.
Vamos ahora con la configuración del acceso SSH para distribuciones Linux o Mac OS, o sencillamente para conectarnos desde otra Raspberry Pi sin necesidad de software adicional.
Para conectarnos a la Raspberry Pi, necesitamos saber la dirección IP de la misma, si no la tenemos. Si aún no la tenemos, escribimos en el terminal de la Raspberry Pi el texto hostname -I. En caso de estar usando una Raspberry Pi sin conexión, podemos mirar la lista de dispositivos conectados al router.
Ahora para conectarnos a la Raspberry Pi desde un ordenador con una distribución Linux o Mac OS debemos usar el comando que os podremos a continuación. Debes cambiar el texto <IP> por la dirección IP de nuestra Raspberry Pi.
ssh pi@<IP>
Si hemos configurado un nombre de usuario diferente para nuestra Raspberry Pi, deberemos cambiar el encabezado pi por nuestro nombre de usuario. Por ejemplo: ssh usurio@xxx.xxx.x.x
Pueden pasar ahora dos cosas:
Nos podemos encontrar con el caso que la Raspberry Pi esté usando una dirección IP a la que el ordenador se haya conectado anteriormente. Esto podría reflejar en pantalla una advertencia que nos pide que borremos el registro de la lista de dispositivos conocidos. Debemos seguir las instrucciones y volver a realizar los pasos de ssh para tener éxito.
Si todo sale bien, se nos pedirá el usuario y la contraseña de la Raspberry Pi a la que tratamos conectar. Este usuario y contraseña es importante cambiarlo por seguridad. El usuario predeterminado para una Raspberry Pi es pi y la contraseña predefinida es raspberry.
Ahora nos debería aparecer una línea de comando. El identificador de la Raspberry Pi será el mismo que en nuestra placa. Si lo hemos cambiado, el identificador será el mismo que hemos introducido, si no lo hemos cambiado, será pi.
pi@raspberrypi ~ $
Ya estamos conectados de manera remota a la Raspberry Pi y podemos empezar a introducir comandos.
Adicionalmente podemos reenviar la sesión «x» mediante SSH para permitir el uso de aplicaciones gráficas, haciendo uso del flag -Y:
ssh -Y pi@xxx.xxx.x.x
Debemos tener en cuenta que X11 no está integrado ya en el sistema operativo Mac OS X. Ahora podemos ejecutar comandos para abrir ventanas gráficas. Podemos usar el siguiente comando que nos abrirá el editor Geany en una ventana gráfica:
geany &
Si queremos más documentación sobre ssh simplemente debemos introducir el comando man ssh en la ventana de terminal.
Vamos ahora a la configuración de SSH para dispositivos Android. Debemos tener en cuenta que para Android no existe un cliente SSH nativo, necesitamos una solución de terceros. Podemos optar por JuiceSSH o bien por Connectbot, aunque nosotros hemos optado por Terminus, que está en la Google Play Store y también está disponible para iOS.
Primeramente, debemos ir a la Play Store de Goolge y descargar Terminus. Una vez descargada e instalada, debemos ejecutarla. Dentro nos encontraremos un mensaje que nos dice «No Hosts», algo que es normal, porque la acabamos de instalar. Pulsamos sobre el botón «+» azul en la esquina inferior izquierda. Luego pulsamos sobre «Nuevo anfitrión».
Añadimos un nombre al nuevo host, el que más nos interese. Seguidamente agregamos la dirección IP en el campo hostname. Ahora rellenamos los campos username y password, y ahora pulsamos sobre el check que nos aparece en la esquina superior derecha.
Tenemos ya agregado un host, por lo tanto, en la pantalla «Hosts» nos debería aparecer el host que acabamos de agregar. Debemos verificar que la conexión WiFi de nuestro smartphone esta activa y que estamos conectados a la misma red que la Raspberry Pi.
Entramos dentro del nuevo host introducido y nos conectamos a la Raspberry Pi. Si la conexión tiene éxito, nos aparecerá una advertencia de seguridad. Dicha advertencia de seguridad es completamente normal, así que podemos obviarla pulsando en «Conectar». Esta advertencia de seguridad solo aparecerá la primera vez que nos conectamos a la Raspberry Pi, ya no aparece más veces.
Ahora nos debería aparecer una línea de comando. El identificador de la Raspberry Pi será el mismo que en nuestra placa. Si lo hemos cambiado, el identificador será el mismo que hemos introducido, si no lo hemos cambiado, será pi.
pi@raspberrypi ~ $
Ya estamos conectados de manera remota a la Raspberry Pi y podemos empezar a introducir comandos. Si queremos salir, sencillamente escribimos exit y le damos al intro, y se cerrara.
Si nos aparece un signo de exclamación en rojo, esto quiere decir que algo ha salido mal. Debemos pulsar sobre este signo de exclamación para que nos indice el error.
Si nos aparece el mensaje de «Tiempo de espera establecido de la conexión agotado» no es problema. Nos podemos encontrar con el caso que la Raspberry Pi esté usando una dirección IP a la que el ordenador se haya conectado anteriormente. Esto podría reflejar en pantalla una advertencia que nos pide que borremos el registro de la lista de dispositivos conocidos. Debemos seguir las instrucciones y volver a realizar los pasos de ssh para tener éxito.
Podría darse el caso que la conexión no se establezca por diferentes razones. Las más probables es que la Raspberry Pi no esté conectada a la red, el SSH este deshabilitado o bien exista un error en las credenciales o la dirección IP. Para estos últimos supuestos, debemos actualizar el host.
Si existe un error en el host debemos ir a la pantalla de «Hosts» y allí mantener pulsado sobre la entrada que está dando el error. Nos aparecerá en la esquina superior derecha un desplegable con nuevas acciones a realizar. Debemos pulsar el ícono del lápiz para entrar a la ventana denominada «Editar host». Aquí podremos verificar si nos hemos equivocado a la hora de agregar el host.
El sistema operativo Apple iOS para smartphone y tabletas carece de un cliente SSH, así que necesitaremos instalar un cliente de terceros. Las opciones más interesantes son Terminus y Prompt 2. Para este tutorial nos centraremos en Termius por ser multiplataforma, aunque Prompt 2 tiene una configuración muy similar.
Lo primero que deberemos hacer es ir a iTunes para descargarnos Terminus. Una vez la tengamos descargada e instalada, es el momento de ejecutar la aplicación e iniciar la configuración.
Cuando iniciamos la aplicación, nos aparece un mensaje que nos indica si queremos recibir notificaciones. Nosotros te recomendamos que las permitas.
Para la configuración debemos seguir los siguientes pasos:
Para conectarnos a la Raspberry Pi, necesitamos saber la dirección IP de la misma, si no la tenemos. Si aún no la tenemos, escribimos en el terminal de la Raspberry Pi el texto hostname -I. En caso de estar usando una Raspberry Pi sin conexión, podemos mirar la lista de dispositivos conectados al router. De manera predeterminada la Raspberry Pi tiene como usuario pi y como contraseña raspberry. Se recomienda el cambio para mayor seguridad.
Una vez hemos almacenado el nuevo host, vamos a la pantalla principal de «Hosts». Aquí se nos mostrara el nuevo host introducido (y otros host si ya teniamos alguno añadido). Debemos tener conectada la WiFi del smartphone y estar conectados a la misma red que la Raspberry Pi, para continuar.
Pulsamos sobre el nuevo host introducido. Cuando establezca conexión, nos aparecera una advertencia de seguridad. Debemos estar tranquilos, no ha sucedido nada malo. Pulsamos sencillamente en «Continuar». Este aviso solo aparece cuando conectamos por primera vez, ya que es un dispositivo al que nunca se había conectado.
Ahora nos debería aparecer una línea de comando. El identificador de la Raspberry Pi será el mismo que en nuestra placa. Si lo hemos cambiado, el identificador será el mismo que hemos introducido, si no lo hemos cambiado, será pi.
pi@raspberrypi ~ $
Ya estamos conectados de manera remota a la Raspberry Pi y podemos empezar a introducir comandos. Si queremos salir, sencillamente escribimos exit y le damos al intro, y se cerrara.
Si nos aparece el mensaje de «Tiempo de espera establecido de la conexión agotado» no es problema. Nos podemos encontrar con el caso que la Raspberry Pi esté usando una dirección IP a la que el ordenador se haya conectado anteriormente. Esto podría reflejar en pantalla una advertencia que nos pide que borremos el registro de la lista de dispositivos conocidos. Debemos seguir las instrucciones y volver a realizar los pasos de ssh para tener éxito.
Podría darse el caso que la conexión no se establezca por diferentes razones. Las más probables es que la Raspberry Pi no esté conectada a la red, el SSH este deshabilitado o bien exista un error en las credenciales o la dirección IP. Para estos últimos supuestos, debemos actualizar el host.
Actualizar el host se realiza en la pantalla de «Hosts» deslizando hacia la izquierda el host que queremos modificar. Ahora nos aparecerán nuevas funciones, entre ellas la de «editar». Nos aparecerá una nueva pantalla de nombre «Editar host» donde podremos realizar los cambios necesarios.
Podemos configurar el acceso a la Raspberry Pi de manera remota sin necesidad de introducir un usuario y contraseña. Esto es posible mediante la creación de una clave asimétrica para SSH en vez de usar un login tradicional.
Si no sabes lo que es una clave asimétrica, se basa en una clave privada y una clave pública. Este sistema se basa en una clave pública para firmar mensajes o acceso que se genera a partir de una clave privada. Obtener la clave pública a partir de la clave privada es algo muy sencillo, pero el proceso inverso requiere una potencia de cómputo descomunal. Es tan alta la potencia de cómputo necesaria, que se considera un proceso imposible.
El primer paso es la verificación de si existen claves de acceso en el ordenador que estamos usando para conectarnos a la Raspberry Pi:
ls ~/.ssh
Si nos aparecen archivos de nombre id_rsa.pub o bien id_dsa.pub, quiere decir que ya hay claves configuradas. Esto nos permite omitir el paso de «Generar nuevas claves SSH». Si queremos podemos generar claves exclusivas para cada SSH, por seguridad adicional.
El proceso de generación de nuevas claves SSH es relativamente sencillo. Siendo el primer paso este comando:
ssh-keygen
Cuando introducimos este comando nos preguntara donde queremos almacenar la nueva clave. Lo ideal es la ubicación predeterminada para esto (~/.ssh/id_rsa). Si no la modificamos, pulsamos en enter.
Se nos pedirá también que ingresemos una frase como contraseña, algo que es opcional. La frase de contraseña se utiliza para el cifrado de la clave SSH privada, de modo que si alguien la copia, nadie pueda hacerse pasar por nosotros para tener acceso al sistema. Si decidimos introducir una frase de contraseña diferente, la deberemos escribir y luego presionar enter. Luego nos la vuelve a pedir, por eso es importante que la memoricemos o al menos la anotemos en un papel. Si no hemos puesto frase, dejamos el campo vacío y le damos a siguiente.
Vamos ahora a mirar dentro de nuestro directorio .ssh el contenido:
ls ~/.ssh
Ahora debería devolvernos los archivos id_rsa e id_rsa.pub: authorized_keys id_rsa id_rsa.pub known_hosts
Así es como se ve la clave publica:
cat ~/.ssh/id_rsa.pub
De tal manera:
ssh-rsa <una larga cadena de caracteres> user@host
Ahora utilizando el equipo desde el cual nos conectaremos, debemos agregar el archivo de clave pública authorized_keys en la Raspberry Pi mandandola mediante SSH:
ssh-copy-id <USERNAME>@<IP-ADRSS>
Para este paso debemos realizar una autenticación con nuestra contraseña.
Como alternativa, si ssh-copy-id no esta disponible en el sistema, podemos hacer una copia manual mediante SSH:
cat ~/.ssh/id_rsa.pub | ssh <USERNAME>@<IP-ADDRESS> 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
Si nos aparece el mensaje ssh: connect to host <IP-ADDRESS> port 22: Connection refused y estamos seguros que la dirección IP es correcta, puede darse el caso que no hayamos habilitado SSH en la Raspberry Pi. Debemos ejecutar sudo raspi-config en la ventana termina de la Raspberry y habilitar SSH. Ahora debemos copiar de nuevo el archivo.
Ahora debemos intentar conectarnos con ssh <USER>@<IP-ADDRESS> pudiendo hacerlo ahora sin problemas.
En caso que aparezca el mensaje «El agente admitió que no pudo firmar con la clave», debemos agregar las identidades RSA o DSA al agente de autenticación y ssh-agentet, y luego ejecutar el siguiente comando:
ssh-add
Puede darse el caso que aun siguiendo los pasos anteriores, no exista un problema al intentar conectarnos. Lo primero que debemos hacer es verificar los registros en busca de errores:
tail -f /var/log/secure # might return: Nov 23 12:31:26 raspberrypi sshd[9146]: Authentication refused: bad ownership or modes for directory /home/pi
Si el registro indica que Authentication refused: bad ownership or modes for directory /home/pi es prueba de que existe un problema de permisos en el directorio de inicio. SSH requiere que el home y ~/.ssh no tengan acceso de escritura grupal. Podemos ajustar estos permisos mediante chmod:
chmod g-w $HOME chmod 700 $HOME/.ssh chmod 600 $HOME/.ssh/authorized_keys
Ahora unicamente el propio usuario tiene acceso a .ssh y .ssh/authorized_keys en el cual se almacenan las claves publicas.
Para quienes utilicen macOS, tras la verificación de la nueva clave, la poemos almacenar en el registro de claves. Nos permite acceder a la Raspberry Pi posteriormente sin necesidad de introducir de nuevo la contraseña. Para ello podemos ejecutar el siguiente comando
ssh-add -K ~/.ssh/id_rsa
Activar SSH en una Raspberry Pi nos ofrece la posibilidad de acceso remoto a este dispositivo de manera sencilla y rápida. Disponer de esta función activa nos permite mejorar la usabilidad, accediendo a información y pudiendo modificar las funciones o mejorarlas, sin tener que acceder físicamente. Esto es especialmente útil si usamos la Raspberry Pi para tareas como domótica, estaciones meteorológicas u otras aplicaciones que puedan requerir acceso remoto.
Te explicamos qué es y cuantos modelos existen de Raspberry Pi
La fuerza de SSH es que puede ser habilitado en cualquier dispositivo con cualquier sistema operativo. Pero tiene un problema, y es que únicamente funciona si la Raspberry Pi a la que queremos conectar está en la misma red WiFi que el equipo de control. Además, os hemos dejado la posibilidad de acceder sin necesidad de introducir cada vez un usuario y contraseña, algo que puede ser bastante útil.
¿Cuéntanos si has usado algunas de estas formas de conexión remota local a la Raspberry Pi mediante SSH y para qué?
CHIEFTEC acaba de presentar dos nuevas cajas para PC, Visio y Visio Air con un…
Asus ZenWiFi BT8 es un sistema Mesh Wi-Fi 7 el cual se sitúa por debajo…
Qualcomm anuncia nuevos SoC Snapdragon X, pero no se trata de una nueva generación, sino…