将 WPA_passphrase 输出转换为 /etc/network/interface

将 WPA_passphrase 输出转换为 /etc/network/interface

这主要是一个格式问题,我一直无法很好地解决。

我想创建一个 bash 函数或脚本,将 wpa-passphrase 的输出转换为 /etc/network/interfaces 可以使用的格式。

WPA 请求者示例

wpa_passphrase ssid password

产生以下输出

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

我需要将该输出转换为 /etc/network/interfaces 可以使用的格式

/etc/network/interface 输出格式示例:

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

我的第一个粗略解决方案是使用:

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

这给了我:

MYSSID
ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b

但我不知道如何将每一行放到 /etc/network/interfaces 格式中的正确位置

更新:使用我当前的解决方案

经过进一步的尝试,我设法让它与此一起工作:

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)

我的解决方案提供了我需要的输出,但它似乎效率不高,我仍然希望看到其他解决方案。

答案1

您可以创建一个如下函数并用于awk根据需要格式化输出:

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'
}

然后打电话generate "my SSID" "PASSWORD"

输出将是:

auto wlan0
iface wlan0 inet dhcp
        wpa-ssid        "my SSID"
        wpa-psk ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b

相关内容