Jak połączyć się z siecią Wi-Fi WPA za pomocą wiersza polecenia?

Odpowiedzi:

113

iw (lista / config) obsługuje tylko WEP.

Potrzebujesz wpasupplicantpakietu zawierającego wpa_supplicantpolecenie, zainstaluj w razie potrzeby za pośrednictwem sudo apt-get install wpasupplicant.

Podajesz swój SSID i hasło /etc/wpa_supplicant.conf(wymaga sudo).

Przykład:

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

Zakładając, że masz interfejs wlan0, z którym możesz się połączyć:

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

„wext” to sterownik, który będzie specyficzny dla każdej karty; odnoszą się do wpa_supplicant -h. Przykłady:

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
źródło
dobrze, że fajnie jest, że iwlist / iwconfig może obsłużyć tylko WEP, ale w moim przypadku wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dwext && dhclient wlan0 nie łączy się z siecią bezprzewodową, chociaż domyślnie NetworkManager łączy mnie z siecią Chcę wypróbować sposób z linii poleceń, czy popełniam jakiś błąd?
Zarejestrowany użytkownik
Ostatnie polecenie to tak naprawdę dwa polecenia i oba należy uruchomić jako root(administrator systemu). Więc sudo wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dwext && sudo dhclient wlan0 podziel je na dwa polecenia &&.
Anders
To rozwiązanie daje mi błąd „wlan0: Unsupported driver 'ext'”.
Cerin,
1
@Rinzwind, Tak ... Przejrzenie strony podręcznika wpa_supplicant pokazuje, że sterownik może się różnić, więc twoje polecenie prawdopodobnie nie będzie działać tak, jak podano dosłownie. Musisz wybrać -D <driver> dla swojego konkretnego sprzętu. Dla mnie skończyło się to na „nl80211”.
Cerin,
1
Po prostu całkowicie pomijam opcję -D i działa! Dzięki! :)
Ray
72

Ten link pokazuje to wszystko i działał dobrze dla mnie: http://linux.icydog.net/wpa.php

Kopiuję tutaj treść, więc mamy ją na wypadek, gdyby strona została wyłączona.

Wiersz polecenia WPA

Czasami będziesz w linii poleceń bez dostępu do narzędzi sieciowych GUI - ale twój punkt dostępu jest zabezpieczony za pomocą WPA. Co robisz?

Zakładając, że twoja karta bezprzewodowa faktycznie działa (tzn. Iwconfig może ją zobaczyć i wchodzić z nią w interakcje), użycie wpa_supplicant jest w rzeczywistości dość proste. Instalowanie wpa_supplicant

Obecnie większość dystrybucji ma domyślnie zainstalowany program wpa_supplicant. Jeśli masz dostępne polecenia wpa_passphrase i wpa_supplicant, możesz zacząć. W przeciwnym razie będziesz musiał zainstalować pakiet, robiąc coś takiego (dla Ubuntu):

$ sudo apt-get install wpasupplicant

Lub (dla Fedory):

# yum install wpa_supplicant

Lub cokolwiek to polecenie jest dla twojej dystrybucji.

Generowanie pliku konfiguracyjnego

Po zainstalowaniu wpa_supplicant utworzymy jego plik konfiguracyjny. Gdy znasz hasło SSID i WPA, wszystko, co musisz zrobić, to uruchomić:

$ wpa_passphrase myrouter mypassphrase > wpa.conf

Oczywiście zamień „myrouter” na SSID routera, „mypassphrase” na hasło WPA, a „wpa.conf” na dowolny plik, w którym chcesz zapisać konfigurację. Ta nazwa pliku nie musi mieć określonego formatu lub mają określone rozszerzenie.

Alternatywnie, aby uniknąć wpisywania hasła w wierszu poleceń (aby nie zostało zapisane w historii powłoki), możesz podać tylko identyfikator SSID w wierszu polecenia. wpa_passphrase będzie czekać na wpisanie hasła, a następnie enter:

$ wpa_passphrase myrouter > wpa.conf
mypassphrase

Powinieneś otrzymać plik wyglądający tak:

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

Łączę się

Teraz uruchomimy wpa_supplicant, aby połączyć się z siecią bezprzewodową. Po pierwsze, jeśli router rozgłasza swój identyfikator SSID (wszystkie domyślnie tak robią), prawdopodobnie chcesz upewnić się, że karta bezprzewodowa rzeczywiście to widzi:

$ iwlist scan

Może być konieczne uruchomienie go jako root, aby wymusić odświeżenie.

Następnie musisz znać trzy informacje:

  1. Których sterowników bezprzewodowych wpa_supplicant należy użyć dla karty. Uruchamianie wpa_supplicant --helpwyświetla listę różnych sterowników (w sekcji „drivers:”). Począwszy od 0.5.8, przydatne opcje to: wext, hostap, madwifi, atmel, ndiswrapper, i ipw(ipw tylko dla starych jąder;> = 2.6.13 powinny stosować wext). Jeśli nie widzisz konkretnego dopasowania dla swojej karty, spróbuj wext, ponieważ jest to rodzaj catch-all.
  2. Urządzenie sieciowe twojej karty. Zazwyczaj jest to eth1 lub wlan0, ale jeśli nie masz pewności, możesz po prostu uruchomić iwconfig. Zgłasza „brak rozszerzeń bezprzewodowych” dla urządzeń innych niż bezprzewodowe i wyświetla niektóre dane dla dowolnych urządzeń bezprzewodowych.
  3. Ścieżka do pliku konfiguracyjnego utworzonego w poprzednim kroku.

Teraz, gdy masz już te dane, uruchom (jako root):

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

Nie ma spacji między opcjami i parametrami. Nie dołączaj nawiasów, ponieważ właśnie je dodałem dla jasności. Na przykład dla mojego laptopa wygląda to tak:

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

Możesz również uruchomić go w tle, używając -Bopcji, aby nie zajmował konsoli.

Teraz jesteś powiązany z siecią.

Łączenie się z Internetem

Aby faktycznie uzyskać dostęp do Internetu, musisz jakoś uzyskać adres IP. Większość ludzi będzie chciała uzyskać dynamiczny adres IP z serwera DHCP, prawdopodobnie tego wbudowanego w router. (Nie zamierzam omawiać ustawiania statycznego adresu IP i tabeli routingu, ponieważ sama w sobie jest bestią).

Aby uzyskać dzierżawę DHCP, najpierw zwolnij dzierżawę, którą nadal posiadasz (jako root):

# dhclient -r

Następnie poproś o nową dzierżawę (oczywiście zastępując eth1 nazwą urządzenia sieciowego, taką samą jak w poprzedniej sekcji):

# dhclient eth1

Masz teraz adres IP, przynajmniej teoretycznie. Miłego surfowania!

Alexandre Schmidt
źródło
1
FYI dla niedoświadczonych osób, większość nazw bezprzewodowych interfejsów kart będzie wlan <liczba>, więc na przykład pierwszą bezprzewodową kartą w twojej konfiguracji będzie wlan0 zamiast eth1
xorinzor
Dzięki, komenda wpa_passphrase pomogła. Próbowałem zaakceptować odpowiedź, ale plik był niepoprawny, wpa_passphrase pomógł w tym, a potem właśnie przekazałem drugie polecenie z zaakceptowanej odpowiedzi (już wiedziałem na pewno, że nazywa się wlan0) ...
Lilian A. Moraru
dzięki, to było naprawdę świetne, czy możesz podać mi link, jak skonfigurować statyczny i routing tabeli ... :)
Yassine
1
@AlexandreSchmidt +1 za kompleksowość!
John Strood,
@JohnStrood ściśle powinieneś podziękować każdemu, kto napisał stronę, ponieważ jest to kopia stamtąd
icc97
8

Debian i inne dystrybucje mają domyślnie działającą funkcję wpa_suplicant w celu zarządzania sieciami Wi-Fi. wpa_suplicant może być obsługiwany przez różnych klientów / interfejsy, takie jak GUI menedżera sieci. Jest to lepiej wyjaśnione w tej wiki Debiana .

wpa_cli to linia poleceń klienta wpa_suplicant do zarządzania sieciami Wi-Fi.

Edycja : Właśnie znalazłem ten post wyjaśniający, jak używać nmcli i jest znacznie lepszy niż wpa_cli, ponieważ jest zgodny z GUI Network Manager i ich ustawieniami oraz zapisanymi sieciami Wi-Fi.

Przykład użycia wpa_cli :

Sprawdź, czy mam już interfejs sieciowy z obsługą 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

Sprawdź, czy proces wpa_suplicant jest uruchomiony:

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

Wejdź w tryb interaktywny klienta WPA:

# wpa_cli

Lista dostępnych punktów dostępu:

> scan
> scan_results

... i dostajesz coś takiego:

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
...

Dodaj swój AP:

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

Wybierz jako bieżący:

> enable_network 0

Połącz się z nim:

> reconnect

Sprawdzić stan:

> status

Wyjdź z wpa_cli:

> quit

Z poziomu powłoki poproś DHCP o ustawienia adresu IP i sieci:

# dhclient -r
# dhclient wlan0
David
źródło
Dlaczego mówisz, wpa_clia potem piszesz wpa_client? Na Kubuntu 18.10 wpa_clientwydaje się nie istnieć jako polecenie
rtrtrt
Masz rację ... naprawiony.
David
3

Najpierw ustaw kartę, jeśli nie jest uruchomiona:

ifconfig wlan0 up

Ustaw parametry zgodnie z siecią

iwlist wlan0 scan
iwconfig wlan0 essid NETWORK_ID key WIRELESS_KEY
LnxSlck
źródło
15
Uważam, że dotyczy to tylko WEP. Brak WPA;)
Rinzwind
Rinzwind ma rację. To jest dla WEP. Przepraszam za pomyłkę.
LnxSlck
2
nie ma problemu. Zostaw to tutaj, a ktoś kiedyś skorzysta z twojej odpowiedzi;)
Rinzwind
czy to zadziała nawet bez klucza takiego jak otwarta sieć?
EvoandroidEvo
1
Mam nadzieję, że nikt nigdy nie skorzysta z odpowiedzi specyficznej dla WEP: „(
Max Ried
2

Istnieje sposób, aby to zrobić za pomocą NetworkManager, jeśli masz checkboxzainstalowany pakiet.

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

( Źródło : błąd 923836 , który pojawił się podczas moich poszukiwań na ten temat.)

zigg
źródło
2

Wszystkie odpowiedzi sugerujące, że wpa_supplicant są nieprawidłowe. Tak, może połączyć cię z siecią WPA, ale na dłuższą metę jest to złe rozwiązanie, ponieważ będzie bardzo trudne w utrzymaniu i nie będzie dobrze grało z połączeniem przewodowym. Przeczytaj tę odpowiedź i ułatw swoje życie, korzystając z Menedżera sieci z wiersza polecenia. Zmarnowałem godziny próbując skonfigurować wpa_supplicant, potem wypróbowałem nmcli i „po prostu działało”.

Cerin
źródło
2
Problem z rzeczami „po prostu działa” polega na tym, że mogą łatwo „po prostu nie działać”, a następnie gdzie jesteś. Dla osób korzystających z CLI bezpośrednie podejście wpa_supplicant jest lepsze, ponieważ ujawnia wszystkie jego części. Wielką zaletą NM jest to, że wszystkie jego części są ukryte. Dlatego błędem jest twierdzenie, że podejście wpa_supplicant jest nieprawidłowe. Lubisz rzeczy, które „po prostu działają”, w porządku. Twoje preferencje są twoim prawem, ale niegrzeczne jest mówienie ludziom, że się mylą tylko dlatego, że ich preferencje nie są twoje. Dlatego zaznaczyłem twoją odpowiedź w dół.
Stephen Boston
2

Możesz użyć VSWM - Very Simple Wireless Manager. Umieszczasz znane AP w prostym pliku cfg (/etc/vswm.cfg), a po uruchomieniu vswmskanuj dostępne sieci i podłącz swoją kartę do pierwszej, która pojawia się na /etc/vswm.cfg.

VSWM jest dostępny na https://github.com/dmelo/vswm . Oto jak wygląda plik konfiguracyjny 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

Pod maską wykorzystuje standardowe narzędzia wiersza poleceń: iwlist, wpa_supplicant, iwconfig, dhclient ... Tylko to automatyzuje zadanie.

Diogo Melo
źródło
1

Miałem problem z wpa_supplicantbezpośrednim połączeniem z siecią bezprzewodową. Mój identyfikator sieci i hasło wygenerowały błędy, gdy korzystałem z wpa_supplicant.confpliku w wpa_supplicantwierszu polecenia, np

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

Byłem w stanie to obejść wpa_cli. Sekwencja poleceń, której musiałem użyć, ponieważ korzystam ze sterownika systemu Windows w systemie Linux ndiswrapper, to:

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

Miałem sieć skonfigurowaną przez dodanie jej w sekcji sieci bezprzewodowej w interfejsie GUI, tak że mogłem kliknąć ikonę sieci przewodowej lub bezprzewodowej i wybrać dostawcę usług bezprzewodowych (co czasami było konieczne do ukończenia logowania).

Jan
źródło
1

Jest nmclito wersja wiersza polecenia domyślnej aplikacji menedżera sieci w systemie Ubuntu.

Niektóre z zalet polegają na tym, że wykorzystuje konfigurację, którą już masz z interfejsu graficznego i nie wymaga dostępu do konta root.

Możesz uruchomić, nmcliaby wyświetlić dostępne opcje.

Przykład połączenia z Wi-Fi o nazwie MYESSID:

    nmcli c up MYESSID   
desgua
źródło
1
nmcli, nm-applet i tak, twoja odpowiedź jest najlepsza, ale nie wiem, dlaczego nikt jej nie głosuje
Saeid
@Saeid Dziękujemy!
desgua