Inicio InformáticaGnu/Linux Script Bash para conectarnos a red Wifi desde consola en GNU/Linux

Script Bash para conectarnos a red Wifi desde consola en GNU/Linux

Publicado por entreunosyceros
Publicado el: Última actualización:

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

script bashEl 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 …

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

8 Comentarios

lozano 28 septiembre, 2019 - 5:41 AM

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

Respuesta
sapoclay 28 septiembre, 2019 - 12:57 PM

Si lo analizas con detalle, te animo a que compartas tus conclusiones. Gracias por el comentario y por la visita. Salu2.

Respuesta
lozano 7 septiembre, 2019 - 4:55 PM

buena intencion pero no funciona en la PI3 mejorara este script, saludos

Respuesta
sapoclay 7 septiembre, 2019 - 6:25 PM

Hola. Es posible, yo solo lo probé en Ubuntu con un PC. Gracias por el comentario, salu2.

Respuesta
Xavier 2 diciembre, 2016 - 1:37 PM

Muy bueno. Gracias x compartir

Respuesta
sapoclay 3 diciembre, 2016 - 8:39 PM

Gracias por la visita.

Respuesta
José D. 13 noviembre, 2016 - 3:25 AM

Funciona genial. Pero no le veo la utilidad. Un saludo

Respuesta
sapoclay 13 noviembre, 2016 - 12:14 PM

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.

Respuesta

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.