WPA_passphrase出力を/etc/network/interfaceに変換

WPA_passphrase出力を/etc/network/interfaceに変換

これはほとんど私がよく理解していない形式の問題です。

wpa-passphraseの出力を/etc/network/interfacesが使用できる形式に変換するbash関数やスクリプトを作成したいと思います。

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

おすすめ記事