Converta a saída WPA_passphrase para / etc / network / interface

3

Este é basicamente um problema de formatação que não consegui resolver bem.

Eu quero criar uma função bash ou script que converta a saída de wpa-passphrase para um formato que possa ser usado por / etc / network / interfaces.

Exemplo de suplicante WPA

wpa_passphrase ssid password

Produz a seguinte saída

network={
    ssid="MYSSID"
    #psk="passphrase"
    psk=ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b
}

Eu preciso converter essa saída para um formato que possa ser usado por / etc / network / interfaces

Exemplo do formato de saída da interface / etc / network / interface:

auto wlan0
iface wlan0 inet dhcp
        wpa-ssid MYSSID
        wpa-psk ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b

Minha primeira solução crua foi usar:

wpa_passphrase MYSSID PASSWORD |grep -E 'ssid|psk' |grep -v "#psk" |cut -d '=' -f 2

O que me dá:

MYSSID
ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b

mas eu não sei como colocar cada uma dessas linhas em seu devido lugar no formato / etc / network / interfaces

ATUALIZAÇÃO: com a minha solução atual

Depois de mais tentativas, consegui fazê-lo funcionar com isto:

while read line
do
        echo "auto wlp3s0"
        echo "iface wlp3s0 inet dhcp"           
        echo -e "\t wpa-ssid $line"
done < <(sudo wpa_passphrase $1 $2 |grep -E 'ssid' |cut -d '=' -f 2)

while read line
do
        echo -e "\t wpa-psk $line"
done < <(sudo wpa_passphrase $1 $2 |grep -E 'psk' |grep -v "#psk" |cut -d '=' -f 2)

Minha solução fornece a saída de que preciso, mas não parece eficiente e ainda gostaria de ver outras soluções.

    
por Jay Hawk 29.08.2018 / 02:49

1 resposta

3

Você pode fazer uma função como abaixo e usar awk para formatar a saída como quiser:

generate() {
sudo wpa_passphrase "$1" "$2" | 
awk -F= 'BEGIN      { print "auto wlan0\n" "iface wlan0 inet dhcp" }
         /ssid/     { print "", "wpa-ssid", $2 }
         /[^#]psk=/ { print "", "wpa-psk" , $2 }' OFS='\t'
}

Em seguida, chame generate "my SSID" "PASSWORD" .

A saída seria:

auto wlan0
iface wlan0 inet dhcp
        wpa-ssid        "my SSID"
        wpa-psk ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b
    
por 29.08.2018 / 06:55