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
Qué es SSH
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.
Por qué debemos usar SSH
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.
Configurar y habilitar SSH en una Raspberry Pi
Vamos ahora a configurar SSH para acceder de manera remota a nuestra Raspberry Pi.
Configuración de la red local y conectividad inalámbrica
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.
Habilitar SSH
El sistema operativo Raspberry Pi OS tiene el servicio SSH deshabilitado de manera predeterminada. Para habilitarlo, debemos realizar los siguientes pasos desde el escritorio:
- Vamos a la «Configuración de Raspberry Pi» desde el menú de «Preferencias»
- Buscaos la pestaña de «Interfaces»
- Seleccionamos la casilla «Habilitar» junto a «SSH»
- Hacemos clic en «OK»
Podemos hacerlo también mediante terminal
- Abrimos una ventana de terminal
- Escribimos «sudo raspi-config» en la ventana terminal
- Seleccionamos «Opciones de interfaz»
- Navegamos y elegimos «SSH»
- Escogemos la opción «Yes»
- Ahora pulsamos «OK»
- Finalmente, le damos a «Finish»
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.
Habilitar SSH sin conexión
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.
Configuración del cliente
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.
Configuración Raspberry Pi SSH usando Windows 10
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:
- Abrimos el Menú de inicio
- Pulsamos sobre la rueda dentada de la izquierda para abrir la Configuración
- Vamos al apartado de Aplicaciones
- Entramos en la sección de Aplicaciones y características
- Accedemos a Características especiales
- Una de las primeras opciones que nos aparecerá es Cliente OpenSSH
- Pulsamos sobre Cliente OpenSSH para instalarlo
- Una vez este instalado, cerramos
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:
- Si recibimos un connection timed out error existe la posibilidad que la IP introducida esté equivocada. Deberemos corregirla.
- Si la conexión tiene éxito, veremos una advertencia de seguridad/autenticidad. Debemos escribir yes para continuar. Esta advertencia solo aparecerá la primera vez que nos conectamos.
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.
Configuración Raspberry Pi SSH usando Linux o Mac OS
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:
- Si recibimos un connection timed out error existe la posibilidad que la IP introducida esté equivocada. Deberemos corregirla.
- Si la conexión tiene éxito, veremos una advertencia de seguridad/autenticidad. Debemos escribir yes para continuar. Esta advertencia solo aparecerá la primera vez que nos conectamos.
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.
X-forwarding para Mac OS X
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.
Configuración Raspberry Pi SSH usando Google Android
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.
Agregar la Raspberry Pi como host
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.
Conexión
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.
Modificar un host y solucionar otros problemas
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.
Configuración Raspberry Pi SSH usando Apple iOS
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.
Agregar la Raspberry Pi como host
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:
- Una vez iniciada la aplicación, debemos ir a «Starat by adding a new host»
- Ahora pulsamos sobre «New host» y se abrirá una nueva ventana
- Introducimos un nombre a la conexión. Si vamos a realizar varias, es recomendable ser lo más concretos posibles
- En «hostname» introducimos la dirección IP de la Raspberry Pi
- Ahora debemos introducir el nombre de usuario de la Raspberry Pi en «username» y la consiguiente contraseña en el campo «password»
- Pulsamos en «Guardar»
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.
Conexión
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.
Modificar un host y solucionar otros problemas
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.
Acceso SSH sin contraseña
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.
Verficacación de las claves SSH existentes
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.
Como generar una clave SSH
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
- id_rsa: Es el nuevo archivo de clave privada y debemos guardarlo en nuestro ordenador
- id_rsa.pub: Es el nuevo archivo de clave pública. Dicho archivo es el que debemos compartir con el resto de máquinas a las que nos queremos conectar. Para nuestro caso, la maquina a la que nos queremos conectar es una Raspberry Pi. Cuando nos intentemos conectar a la Raspberry Pi, al coincidir la clave pública y privada, nos permitirá la conexión.
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
Copiar la clave pública en la Raspberry Pi
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
Ajuste de permisos en los directores de inicio y .ssh
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.
Guardar la contraseña en el llavero de macOs
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
Palabras finales sobre SSH en la Raspberry Pi
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é?