Inicio InformáticaGnu/LinuxScript 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
Resumen de privacidad
cookies entreunosyceros

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible.

La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudarnos a comprender qué secciones de la web encuentras más interesantes y útiles.

Nunca almacenamos información personal de ningún tipo.

Tienes toda la información sobre privacidad, derechos legales y cookies en nuestra página sobre la política de privacidad o en la página sobre nuestra política de cookies.

Cookies necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.

Cookies de terceros

Esta web utiliza las siguientes cookies adicionales:

- Mailchimp: Recordar si ya estás suscrito al boletín de noticias y sino ofrecértelo al salir.

- Accesibilidad: Para saber tus ajustes de accesibilidad en cada visita.

- Comentarios: Saber si has leído y aceptado nuestra política de privacidad a la hora de dejar un comentario en la web.

- Google Analytics: Localización para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

- Goggle Adsense: Anuncios personalizados según tu geolocalización y preferencias.

Dejar estas cookies activadas nos permite mejorar nuestra web.

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.