Как подключиться к Wi-Fi сети WPA с помощью командной строки?

113

В общем, я бы хотел использовать iwconfigдля подключения к моей сети Wi-Fi, когда я не в X. Но я просто не вижу способа сделать это на странице руководства. Любая идея?

Кен Киндер
источник

Ответы:

113

iw (list / config) может обрабатывать только WEP.

Вам нужен wpasupplicantпакет, который предоставляет wpa_supplicantкоманду, установите при необходимости через sudo apt-get install wpasupplicant.

Вы вводите свой SSID и пароль в /etc/wpa_supplicant.conf(требуется sudo).

Пример:

network={
    ssid="ssid_name"
    psk="password"
}

Предполагая, что ваш интерфейс wlan0, вы можете подключиться с:

sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf -D wext
sudo dhclient wlan0

«wext» - это драйвер, который будет специфичным для каждой карты; обратитесь к wpa_supplicant -h. Примеры:

hostap (default) Host AP driver (Intersil Prism2/2.5/3). (this can also be used with Linuxant DriverLoader).
hermes Agere Systems Inc. driver (Hermes-I/Hermes-II).
madwifi MADWIFI 802.11 support (Atheros, etc.).
atmel ATMEL AT76C5XXx (USB, PCMCIA).
wext Linux wireless extensions (generic).
ndiswrapper Linux ndiswrapper.
broadcom Broadcom wl.o driver.
ipw Intel ipw2100/2200 driver.
wired wpa_supplicant wired Ethernet driver
roboswitch wpa_supplicant Broadcom switch driver
bsd BSD 802.11 support (Atheros, etc.).
ndis Windows NDIS driver.
Rinzwind
источник
хорошо, что приятно, что iwlist / iwconfig может обрабатывать только WEP, но в моем случае wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dwext && dhclient wlan0 не подключен к беспроводной сети, хотя по умолчанию NetworkManager подключает меня к сети. Я хочу попробовать способ командной строки. Есть ли какая-то ошибка, которую я делаю?
Зарегистрированный пользователь
Последняя команда на самом деле две команды, и вам нужно запустить обе как root(системный администратор). Так что sudo wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dwext && sudo dhclient wlan0 или разделите их на две команды вокруг &&.
Андерс
Это решение дает мне ошибку "wlan0: Unsupported driver 'ext'".
Церин
1
@Rinzwind, да ... Просмотр справочной страницы wpa_supplicant показывает, что драйвер может отличаться, поэтому ваша команда, скорее всего, будет работать не так, как буквально. Вы должны выбрать -D <драйвер> для вашего конкретного оборудования. Для меня это оказалось "nl80211".
Церин
1
Я просто полностью опускаю опцию -D, и она работает! Спасибо! :)
Рэй
72

Эта ссылка показывает все это и прекрасно работает для меня: http://linux.icydog.net/wpa.php

Я копирую содержимое здесь, поэтому оно у нас есть на тот случай, если сайт отключится.

Командная строка WPA

Иногда вы будете в командной строке без доступа к сетевым инструментам GUI - но ваша точка доступа защищена с помощью WPA. Чем ты занимаешься?

Предполагая, что ваша беспроводная карта действительно работает (т.е. iwconfig может видеть ее и взаимодействовать с ней), использование wpa_supplicant на самом деле довольно просто. Установка wpa_supplicant

В большинстве дистрибутивов в настоящее время wpa_supplicant установлен по умолчанию. Если у вас есть команды wpa_passphrase и wpa_supplicant, тогда все готово. В противном случае вам нужно будет установить пакет, выполнив что-то вроде (для Ubuntu):

$ sudo apt-get install wpasupplicant

Или (для Fedora):

# yum install wpa_supplicant

Или какая-нибудь команда для вашего дистрибутива.

Генерация файла конфигурации

Теперь, когда wpa_supplicant установлен, мы создадим его файл конфигурации. Когда вы знаете SSID и пароль WPA, все, что вам нужно сделать, это запустить:

$ wpa_passphrase myrouter mypassphrase > wpa.conf

Конечно, замените «myrouter» на SSID вашего маршрутизатора, «mypassphrase» на вашу парольную фразу WPA и «wpa.conf» на любой файл, в котором вы хотите сохранить конфигурацию. Это имя файла не обязательно должно соответствовать определенному формату или иметь конкретное расширение.

В качестве альтернативы, чтобы не вводить фразу-пароль в командной строке (чтобы она не сохранялась в истории оболочки), вы можете указать только SSID в командной строке. wpa_passphrase будет ждать, пока вы наберете парольную фразу с последующим вводом:

$ wpa_passphrase myrouter > wpa.conf
mypassphrase

Вы должны получить файл, похожий на этот:

network={
    ssid="myrouter"
    #psk="mypassphrase"
    psk=8ada1f8dbea59704ac379538b4d9191f6a72390581b4cd7a72864cea685b1a7f
}

На связи

Теперь мы фактически запустим wpa_supplicant для подключения к беспроводной сети. Во-первых, если ваш маршрутизатор передает свой SSID (они все делают по умолчанию), вы, вероятно, захотите убедиться, что ваша беспроводная карта действительно его видит:

$ iwlist scan

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

Далее вам нужно знать три элемента информации:

  1. Какие беспроводные драйверы wpa_supplicant использовать для вашей карты. Выполняется wpa_supplicant --helpсписок различных драйверов, которые у него есть (в разделе «драйверы:»). По состоянию на 0.5.8, полезные варианты: wext, hostap, madwifi, atmel, ndiswrapper, и ipw(фш это только для старых ядер;> = 2.6.13 следует использовать wext). Если вы не видите конкретного соответствия для вашей карты, попробуйте wext, так как это своего рода универсальное решение.
  2. Сетевое устройство вашей карты. Обычно это eth1 или wlan0, но если вы не уверены, можете просто бежать iwconfig. Он сообщит об отсутствии беспроводных расширений для не беспроводных устройств и отобразит некоторые данные для любых беспроводных устройств.
  3. Путь к файлу конфигурации, который вы создали на предыдущем шаге.

Теперь, когда у вас есть эти данные, запустите (с правами root):

# wpa_supplicant -D[driver] -i[device] -c[/path/to/config]

Между параметрами и параметрами нет пробелов. Не включайте скобки, поскольку я только добавил их для ясности. Например, для моего ноутбука это выглядит так:

# wpa_supplicant -Dwext -ieth1 -c/root/wpa.conf

Вы также можете запустить его в фоновом режиме, используя -Bопцию, чтобы он не занимал вашу консоль.

Теперь вы связаны с сетью.

Начало онлайн

Чтобы действительно выйти в интернет, вам нужно как-то получить IP. Большинство людей просто хотят получить динамический IP-адрес от DHCP-сервера, возможно, встроенного в маршрутизатор. (Я не собираюсь рассказывать об установке статического IP-адреса и таблицы маршрутизации, потому что это само по себе чудовище.)

Чтобы получить аренду DHCP, сначала освободите все аренды, которые вы все еще держите (от имени root):

# dhclient -r

Затем попросите новую аренду (конечно, заменив eth1 именем вашего сетевого устройства, которое использовалось в предыдущем разделе):

# dhclient eth1

Теперь у вас есть IP, по крайней мере, в теории. Приятного серфинга!

Александр Шмидт
источник
1
К вашему сведению, для неопытных людей большинство имен интерфейсов беспроводных карт будут иметь wlan <число>, поэтому, например, первая беспроводная карта в вашей конфигурации будет wlan0 вместо eth1
xorinzor
Спасибо, команда wpa_passphrase помогла. Я попробовал принятый ответ, но файл был неправильным, wpa_passphrase помог с этим, а затем я просто передал вторую команду из принятого ответа (я уже точно знал, что она называется wlan0) ...
Лилиан А. Морару
спасибо, это было действительно здорово, можете ли вы дать мне ссылку покрытия, как настроить статические и таблицу маршрутизации ... :)
Yassine
1
@AlexandreSchmidt +1 за всесторонний характер!
Джон Строуд
@JohnStrood строго вам следует поблагодарить того, кто написал сайт, так как это оттуда копия
icc97
8

В Debian и других дистрибутивах wpa_suplicant по умолчанию работает как сервис для управления сетями Wi-Fi. wpa_suplicant может обрабатываться разными клиентами / внешними интерфейсами, такими как графический интерфейс администратора сети. Это лучше объяснено в этой вики Debian .

wpa_cli - это клиент командной строки wpa_suplicant для управления сетями Wi-Fi.

Редактировать : я только что нашел этот пост, объясняющий, как использовать nmcli, и он намного лучше, чем wpa_cli, поскольку он совместим с менеджером сети GUI, их настройками и сохраненными сетями Wi-Fi.

Пример использования wpa_cli :

Проверьте, что у меня уже есть сетевой интерфейс с поддержкой Wi-Fi:

# iwconfig
wlan0     IEEE 802.11bgn  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=22 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on

Проверьте, запущен ли процесс wpa_suplicant:

# ps -e | grep wpa
1881 ?        00:00:07 wpa_supplicant

Войдите в интерактивный режим клиента wpa:

# wpa_cli

Список доступных точек доступа:

> scan
> scan_results

... и вы получите что-то вроде этого:

bssid / frequency / signal level / flags / ssid
e0:60:66:7c:81:7f       2417    -66     [WPA2-PSK-CCMP][ESS]    vodafone817E
e0:60:66:61:83:4b       2452    -76     [WPA2-PSK-CCMP][WPS][ESS]       vodafone834A
f8:8e:85:c5:65:c2       2462    -76     [WPA-PSK-CCMP+TKIP][WPS][ESS]   MOVISTAR_65C1
a8:d3:f7:46:0c:be       2472    -83     [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]       Orange-0CBC
...

Добавьте свой AP:

> add_network
> set_network 0 ssid "vodafone817E"
> set_network 0 psk "my-pass-phrase"

Выберите его как текущий:

> enable_network 0

Подключитесь к нему:

> reconnect

Проверьте статус:

> status

Выход из wpa_cli:

> quit

Из оболочки запросите у DHCP настройки IP и сети:

# dhclient -r
# dhclient wlan0
Дэвид
источник
Почему ты говоришь, wpa_cliа потом пишешь wpa_client? На Kubuntu 18.10, wpa_clientкажется, не существует как команда
rtrtrt
Вы правы ... исправлено.
Дэвид
3

Сначала поднимите карту, если она не запущена:

ifconfig wlan0 up

Установите параметры в соответствии с вашей сетью

iwlist wlan0 scan
iwconfig wlan0 essid NETWORK_ID key WIRELESS_KEY
LnxSlck
источник
15
Я считаю, что это только для WEP. Нет WPA;)
Rinzwind
Ринзвинд прав. Это для WEP. Извините за ошибку.
LnxSlck
2
без проблем. Оставьте это здесь, и кто-нибудь когда-нибудь получит пользу от вашего ответа;)
Rinzwind
это будет работать даже без ключа, как открытая сеть?
EvoandroidEvo
1
Я надеюсь, что никто не извлечет пользу из конкретного ответа WEP: '(
Макс Рид,
2

На самом деле есть способ сделать это с помощью NetworkManager, если у вас установлен checkboxпакет.

sudo /usr/share/checkbox/create_connection SSID --security=wpa -key=WPA-KEY

(Кредит: ошибка 923836 , которая появилась в моих поисках по теме.)

zigg
источник
2

Все ответы, предлагающие wpa_supplicant, неверны. Да, он может подключить вас к сети WPA, но в конечном итоге это плохое решение, потому что его будет очень сложно поддерживать и он не будет хорошо работать с проводным соединением. Прочитайте этот ответ и сделайте свою жизнь проще, используя Network Manager из командной строки. Я потратил впустую часы, пытаясь настроить wpa_supplicant, затем попробовал nmcli, и он "просто работал".

Cerin
источник
2
Проблема с вещами, которые «просто работают», в том, что они могут легко «просто не работать», и тогда где вы находитесь. Для людей с CLI прямой подход wpa_supplicant лучше, потому что он раскрывает все его части. Великое достоинство NM в том, что все его части спрятаны. Поэтому неправильно говорить, что подход wpa_supplicant неверен. Вам нравятся вещи, которые «просто работают», хорошо. Ваше предпочтение - ваше право, но невежливо говорить людям, что они неправы, только потому, что их предпочтения не ваши. Вот почему я поставил галочку в вашем ответе.
Стивен Бостон
2

Вы можете использовать VSWM - Very Simple Wireless Manager. Вы помещаете свои известные точки доступа в простой файл cfg (/etc/vswm.cfg) и при запуске vswmсканируете доступные сети и подключаете свою карту с первым, который появляется в /etc/vswm.cfg.

VSWM доступен по адресу https://github.com/dmelo/vswm . Вот как выглядит файл конфигурации vswm.cfg:

[global]

dev = wlan0
dns = ["4.2.2.1","8.8.8.8"]

[wlan0-0]

ssid = Network1
psk = netpassword
protocol = WPA
net = dhcp

[wlan0-1]

ssid = Network2
protocol = WEP
net = static
address = 192.168.0.15/24

Под капотом он использует стандартные инструменты командной строки: iwlist, wpa_supplicant, iwconfig, dhclient ... Только это автоматизирует работу.

Диого Мело
источник
1

У меня были проблемы с использованием wpa_supplicantнапрямую, чтобы войти в беспроводную сеть. Мой идентификатор сети и пароль генерировали ошибки, когда я использовал wpa_supplicant.confфайл в wpa_supplicantкомандной строке, например

sudo wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -B

Я смог обойти это wpa_cli. Последовательность команд, которую я должен был использовать, поскольку я использую драйвер Windows с Linux ndiswrapper, выглядит следующим образом:

sudo modprobe ndiswrapper
sudo iwconfig wlan0 essid "<My Network ID>" mode managed
sudo wpa_cli identity "<My Network ID>" password "<My password>"

Я настроил сеть, добавив ее в раздел беспроводных сетей в графическом интерфейсе, чтобы я мог щелкнуть значок проводной или беспроводной сети и выбрать поставщика услуг беспроводной связи (который иногда требовался для завершения входа в систему).

Джон
источник
1

Версия nmcliкомандной строки стандартного приложения сетевого менеджера в Ubuntu.

Некоторые из преимуществ заключаются в том, что он использует конфигурацию, уже имеющуюся у вас в графическом интерфейсе, и ему не требуется root-доступ.

Вы можете запустить, nmcliчтобы показать доступные варианты.

Пример подключения к Wi-Fi с именем MYESSID:

    nmcli c up MYESSID   
desgua
источник
1
nmcli, nm-applet, и да, ваш ответ самый лучший, но я не знаю, почему никто не голосует за него
Саид
@Saeid Спасибо!
desgua