Тестирование существования/удостоверений WiFi перед вызовом dhclient?

Передача пароля sudo в сценарии совершенно бессмысленна. Вместо этого добавьте правило sudo , добавляющее определенную команду, которую необходимо выполнить с помощью NOPASSWD тэгов . Следите за тем, чтобы правило NOPASSWD , специфичное для команды, следовало за любым общим правилом.

saeid ALL = (ALL:ALL) ALL
saeid ALL = (root) NOPASSWD: service lightdm start

Но это, вероятно, все равно не полезно. lightdm start запускает запрос на вход в систему, но это необходимо только в том случае, если вы хотите разрешить другим пользователям входить в систему графически. Вам это не нужно, если вы хотите только начать сеанс GUI. Вместо этого вызовите startx для запуска сеанса GUI из сеанса текстового режима. Это не требует каких-либо дополнительных привилегий.

Возможно, потребуется явно указать диспетчер окон или среду рабочего стола, поскольку startx может не выбрать тот же тип сеанса по умолчанию, что и lightdm.

startx -- gnome-session

-121--57339-

В общем случае не нужно ничего упускать и цитировать . Безопасный способ записи:

FILE="/usr/local/var/www/htdocs/${FILENAME}!3.zip"
UNZIPPEDFOLDER="$("$UNZIP" "$FILE" | "$GREP" -m1 'creating:' | "$CUT" -d' ' -f5-)"
echo "$UNZIPPEDFOLDER"

-121--166122-

! - это символ расширения журнала команд, поэтому его необходимо цитировать в командной строке, когда расширение журнала включено. Его не нужно цитировать внутри сценария.

На главной странице:

При использовании средств расширения истории команд (см. ниже HISTORY EXPANSION) символ расширения истории, обычно!, должен быть процитирован для предотвращения расширения истории.

и

Неинтерактивные оболочки не выполняют расширение истории по умолчанию.

для получения более подробной информации см. man bash , поиск QUOTING и HISTORY EXPANSION .

3
09.03.2018, 01:41
2 ответа

Я бы разбил его на отдельные функции, что позволило бы мне проверить подключение к Wi-Fi перед перенастройкой сети.

#!/usr/bin/env bash
CONF="/etc/wpa_supplicant/wpa_supplicant.conf"

function connect_wifi() {
    wpa_supplicant -B -i wlan0 -c $CONF >/dev/null 2>&1
}

function connect_tcpip() {
    service ntp restart
    ip link set dev wlan0 down
    ip link set dev wlan0 up
    dhclient wlan0
}

FUNC_CW=$(declare -f connect_wifi)
FUNC_CT=$(declare -f connect_tcpip)

if (sudo bash -c "$FUNC_CW; connect_wifi"); then
    sudo bash -c "$FUNC_CT; connect_tcpip"
else
    echo "Error Connecting to Wifi.  Please check your credentials and try again."
fi
1
27.01.2020, 21:21

Это пример ./script, включающий команду wpa_passphraseдля настройки SSIDи password:

.
#!/bin/bash

if iwgetid; then
    wpa_cli terminate
    ip addr flush wlan0
    ip link set dev wlan0 down
    rm -r /var/run/wpa_supplicant > /dev/null
    ip link set dev wlan0 up
fi

wpa_supplicant -B -i wlan0 -c<(wpa_passphrase "$1" "$2") > /dev/null 2>&1
dhclient wlan0
service ntp restart
exit

Использование:

sudo./script "My SSID" "My-Password"

Обновление

Если wpa_supplicantуспешно аутентифицирован с указанными ssidи pass, вы получите WPA: Key negotiation completedв файле журнала.

В команду wpa_supplicantдобавлена ​​опция -fдля предоставления файла log.

Вы можете проверить статус выхода grepперед выполнением команды dhclient.

#!/bin/bash

if iwgetid; then
    wpa_cli terminate
    ip addr flush wlan0
    ip link set dev wlan0 down
    rm -r /var/run/wpa_supplicant > /dev/null
    ip link set dev wlan0 up
fi
# A minimal wpa_supplicant.conf configuration file.

echo -e "\nctrl_interface=/run/wpa_supplicant \nupdate_config=1\n" > /etc/wpa_supplicant/wpa_supplicant.conf

# A prompt for SSID and WPA passphrase. The -f option to get a log file.
# sleep command will be useful because the authentication will take a few 
# second before executing grep.

echo "" > logfile

wpa_supplicant -B -i wlan0 -c<(wpa_passphrase "$1" "$2") -f logfile

sleep 10

grep -c "WPA: Key negotiation completed" logfile

if [ $? -eq 0 ] 
   then
   echo "Key negotiation completed successfully" 
   timeout 15 dhclient wlan0
   exit 0
else
  echo "Authentication failed"
fi
exit 1

Использование:

sudo./script "My SSID" "My-Password"
2
27.01.2020, 21:21

Теги

Похожие вопросы