Tabla de contenido
El post de hoy lo dejo a modo de apunte por que me ha resultado muy útil. Estaba yo toqueteando un equipo sin entorno gráfico de manera remota y me interesaba activar al red Wifi de la casa donde se situaba este equipo. Recordando un poco caí en la cuenta de que un día había encontrado por algún sitio un fantástico Script Bash ara conectar el equipo la red Wifi.
Como sé que la red nunca deja de sorprenderme, buscando un poco me encontré el mismo Script que recordaba, pero un poco más afinado. En este caso, alguien ha sido capaz de crear un script para configurar una conexión wifi mediante un asistente usando networkmanager.
Yo todavía lo he modificado para mi uso propio y personal, pero aquí voy a dejarlo tal cual lo encontré para que todo el que quiera pueda trabajar con el sin mi código por el medio.
Instrucciones
Accedemos a la web de pastebin, lo copiamos y pegamos en un nuevo archivo, y le colocamos un nombre como wifi.sh, por ejemplo.
Tendremos que darle permisos de ejecución con +x:
sudo chmod +x wifi.sh
y por último lo ejecutamos como todos los scripts (desde la terminal) pasándole como primer argumento la interfaz Wifi que queremos conectar (en mi caso será wlp9s0). Si quieres saber como se llama tu interfaz con un ifconfig lo sabrás.
sudo ./wifi.sh wlp9s0
Este script lo he probado en Ubuntu 16.04, Debian 8 y raspbian (Raspberry Pi).
Por si acaso lo quitasen de Pastebin, voy a dejar aquí apuntado este fantástico script.
Script Bash para conectarnos a red Wifi desde consola en GNU/Linux
#!/bin/bash
#
# 01/06/2013
# This script attempts to semi-automate the wifi connection process from the command line.
# It is intended to be used on a headless machine without the requirement of typing several commands for a connection.
# The script stores previous connection credentials in PLAINTEXT as *.wpa files in the executed directory and in /etc/wpasupplicant.conf. These .wpa files are used to connect to several different ap using previously stored info.
# Probably a good idea to stop and other network managing software while running this script, also in testing wpa_supplicant does a pretty good job of re-connecting a disassociated link automatically.
#
# Mainly created from a combination of scripts taken from theses two sources:
#
# AND
# http://www.linuxquestions.org/questions/linux-general-1/wifi-connect-script-tested-in-ubuntu-772646/
#
# Copy, Distribute and Modify Freely.
#
INT=$1
if [ -z "$1" ]; then
printf "Usage: $0 [interface]\n"
exit
fi
if [ "$(id -u)" != "0" ]; then
printf "This script must be run as root\n" 1>&2
exit
fi
#
# Search for previous saved config files
#
function read_saved {
#
# Search for previous wpa configuration files.
#
#
# Save and change IFS so spaces in file names are not interpreted as separate lines in the array
#
OLDIFS=$IFS
IFS=$'\n'
#
# Read all file names into an array ref:http://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html
# " -printf '%f\n' " removes path info from outputs ref:http://serverfault.com/questions/354403/remove-path-from-find-command-output
#
SAVED_LIST=($(find . -type f -name "*.wpa" -printf '%f\n'))
#
# restore ifs
#
IFS=$OLDIFS
#
# Tests for number of saved wifi connections, if none exit
#
if [ -z "${SAVED_LIST[0]}" ]; then
printf "There are no previous saved wifi connections\n\n"
#
# Create new connection
#
conf_create
fi
#
#PS3 Sets the prompt for the select statement below
#
PS3="Choose a previously saved wifi connection or 's' to skip: "
#
#Select one of the previous saved configurations to connect with or quit
#
select ITEM in "${SAVED_LIST[@]}"; do
#
# Quit if selected number does not exist or alpha in entered
#
if [ -z "$ITEM" ] ; then
printf "Skipping\n"
conf_create
fi
printf "$ITEM is selected\n"
cat "$ITEM">/etc/wpa_supplicant.conf | xargs
connect "$ITEM"
done
}
function conf_create (){
#
# Scans for wifi connections & isolates wifi AP name
#
eval LIST=( $(sudo iwlist $INT scan 2>/dev/null | awk -F":" '/ESSID/{print $2}') )
#
#PS3 Sets the prompt for the select statement below
#
PS3="Choose wifi connection or 'q' to quit: "
#
# Tests for number of wifi connections, exits if none
#
if [ -z "${LIST[0]}" ]; then
printf "No available wifi connection using $INT\n"
exit
fi
#
# Select from a LIST of scanned connections
#
select ITEM in "${LIST[@]}"; do
ifconfig $INT | grep inet
#
# Quit if selected number does not exist or alpha in entered
#
if [ -z "$ITEM" ] ; then
printf "Exiting\n"
exit
fi
#
# Get user input for passphrase no need to escape spaces
#
printf "Enter the passphrase for $ITEM?\n"
read "PASSPHRASE"
#
# Append the ITEM variable (ESSID) to .wpa to make a filename for saved configs
#
FILENAME=$ITEM".wpa"
#
# Run wpa_passphrase to generate a file for wpa_supplicant to use, store it locally and in etc/wpa_supplicant.conf
#
printf "Running wpa_passphrase\n"
wpa_passphrase "$ITEM" "$PASSPHRASE" > "$FILENAME" | xargs
cat "$FILENAME">/etc/wpa_supplicant.conf | xargs
printf "Creating new configuration using $ITEM\n"
#
# Jump to connect function, pass on the ESSID variable for connection
#
connect $ITEM
done
}
function connect (){
printf "Connecting using file $*\n"
#
# Capture incoming argument
#
ESSID=$*
#
# Kill previous instances of wpa_supplicant to stop other instances wpa_supplicant fighting several different AP's
# Kill based on ref: http://thegeekstuff.com/2011/10/grep-or-and-not-operators/ and http://stackoverflow.com/questions/3510673/find-and-kill-a-process-in-one-line-using-bash-and-regex
# Release dhcp ip's and bring down the interface
#
kill $(ps aux | grep -E '[w]pa_supplicant.*\'$INT'' | awk '{print $2}') | xargs
dhclient $INT -r
ifconfig $INT down
#
# Assign new credentials to interface
#
iwconfig $INT mode managed essid "$ESSID"
printf "Configured interface $INT; ESSID is $ESSID\n"
ifconfig $INT up
printf "Interface $INT is up\n"
wpa_supplicant -B -Dwext -i$INT -c/etc/wpa_supplicant.conf 2>/dev/null | xargs
printf "wpa_supplicant running, sleeping for 15...\n"
#
# Wait to connect before asking for a ip address
#
sleep 15
printf "Running dhclient\n"
dhclient $INT
#
# Show current ip for interface
#
ifconfig $INT | grep inet
exit
}
#
# Start here
#
read_saved
exit
Esta es una prueba más de que la gestión de redes por consola en GNU/Linux es estupenda. Podemos hacer lo que queramos, desde gestión DNS, configuraciones TCP/IP, hasta ataques por fuerza bruta a redes Wifi para sacar contraseñas.
No obstante hay una cosa sencilla que podemos hacer que quizás no conocieses, y es obtener un listado de las redes Wifi, para después conectarnos a ellas sin necesidad de ninguna GUI.
Listar redes Wifi
Levantamos la interfaz de red wifi:
sudo ifconfig wlp9s0 up
Escanemaos y listamos las redes wifi disponibles:
sudo iwlist wlp9s0 scan
Esta última parte quizás debería ser la primera de este post, pero supongo que el orden de los factores …
8 Comentarios
Analizare paso a paso las instrucciones del script Y el amigo que no le observa utilidad la verdad es bien util este script por lo de respuesta de no entorno gráfico por ejemplo cuando instalas Linux tipo lite, Saludos
Si lo analizas con detalle, te animo a que compartas tus conclusiones. Gracias por el comentario y por la visita. Salu2.
buena intencion pero no funciona en la PI3 mejorara este script, saludos
Hola. Es posible, yo solo lo probé en Ubuntu con un PC. Gracias por el comentario, salu2.
Muy bueno. Gracias x compartir
Gracias por la visita.
Funciona genial. Pero no le veo la utilidad. Un saludo
Gracias por la visita. Es útil cuando no hay un entorno gráfico desde el que conectarse y necesitas tener una conexión a internet. Salu2.