Abe Estrada

WPA Supplicant

Cada vez que necesito usar una Raspberry Pi para un proyecto nuevo, instalo la versión “Lite” de Raspbian y mi preferencia es conectar la Raspberry Pi solo con el cable microUSB y trabajar de manera remota por medio de SSH.

Para lograr esto, es necesario crear un archivo llamado ssh dentro de la partición /boot de la tarjeta SD donde esta Raspbian instalado y agregar el archivo wpa_supplicant.conf con la información necesaria para que la Raspberry Pi se pueda conectar a la red WiFi y tenerla dentro de la red local para ingresar por medio de SSH.

El archivo wpa_supplicant.conf debe tener esta mínima información:

network={
  ssid="SSID"
  psk="123456789"
}

La cual expone la contraseña de la red WiFi en texto plano. Para evitar esto se puede utilizar el comando wpa_passphrase dentro de Linux y generar una cadena de texto encriptada con la contraseña.

En el caso de que el nombre de la red WiFi sea “Demo” y la contraseña sea “123456789” el psk sería 63079f1c4891c9bb8a0496498d793993b5a0927e042358833eef89f1a90719a1.

Y el archivo wpa_supplicant.conf quedaría de la siguiente forma:

Actualización: apartir de Raspbian Stretch (Septiembre del 2017) se requiere un wpa_supplicant.conf más completo.

country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
  ssid="Demo"
  psk=63079f1c4891c9bb8a0496498d793993b5a0927e042358833eef89f1a90719a1
  key_mgmt=WPA-PSK
}

El problema es que el comando wpa_passphrase no existe en macOS o Windows y por lo tanto no se pueden generar esas cadenas de texto hexadecimal encriptadas para no exponer la contraseña de la red WiFi. Esto se soluciona con el siguiente script en Ruby.

require 'openssl'

ssid = 'Demo'
psk  = '123456789'

puts 'country=US'
puts 'ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev'
puts 'update_config=1'
puts ''
puts 'network={'
puts '  ssid="' + ssid + '"'
puts '  psk=' + OpenSSL::PKCS5.pbkdf2_hmac_sha1(psk, ssid, 4096, 32).unpack("H*").first
puts '  key_mgmt=WPA-PSK'
puts '}'

Con este script podemos generar la cadena de texto hexadecimal encriptado para terminar de configurar la Raspberry Pi y dejarla lista para que se conecte a Internet inmediatamente cuando prenda y sin la necesidad de conectarle un teclado y un monitor, todo esto desde la misma computadora desde donde se realizó la instalación de Raspbian.