Làm cách nào để kết nối với mạng wifi WPA bằng dòng lệnh?


113

Về cơ bản, tôi muốn sử dụng iwconfigđể kết nối với mạng wifi của mình khi tôi không ở trong X. Nhưng tôi không thấy cách nào để làm điều đó trong trang man. Ý tưởng nào không?


Câu trả lời:


113

iw (list / config) chỉ có thể xử lý WEP.

Bạn cần wpasupplicantgói cung cấp wpa_supplicantlệnh, cài đặt nếu cần thiết thông qua sudo apt-get install wpasupplicant.

Bạn đặt SSID và mật khẩu của bạn vào /etc/wpa_supplicant.conf(yêu cầu sudo).

Thí dụ:

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

Giả sử giao diện của bạn là wlan0, bạn có thể kết nối với:

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

"Wext" là trình điều khiển và sẽ cụ thể cho từng thẻ; tham khảo wpa_supplicant -h. Ví dụ:

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.

thật tuyệt khi iwlist / iwconfig chỉ có thể xử lý WEP nhưng trong trường hợp của tôi wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dwext && dhclient wlan0 không kết nối được với mạng không dây, mặc dù theo mặc định, Trình quản lý mạng kết nối tôi với mạng Tôi muốn thử cách sử dụng dòng lệnh?
Người dùng đã đăng ký

Lệnh cuối cùng thực sự là hai lệnh và bạn cần chạy cả hai như root(quản trị viên hệ thống). Vì vậy, sudo wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dwext && sudo dhclient wlan0 hoặc chia chúng thành hai lệnh xung quanh &&.
Anders

Giải pháp này mang lại cho tôi lỗi "wlan0: Trình điều khiển không được hỗ trợ 'ext'".
Cerin

1
@Rinzwind, Có ... Nhìn qua trang chủ của wpa_supplicant cho thấy trình điều khiển có thể thay đổi, vì vậy lệnh của bạn có thể sẽ không hoạt động như được đưa ra theo nghĩa đen. Bạn phải chọn -D <driver> cho phần cứng cụ thể của mình. Đối với tôi, nó đã trở thành "nl80211".
Cerin

1
Tôi hoàn toàn bỏ qua tùy chọn -D và nó hoạt động! Cảm ơn! :)
Ray

72

Liên kết này cho thấy tất cả và hoạt động tốt với tôi: http://linux.icydog.net/wpa.php

Tôi đang sao chép nội dung ở đây, vì vậy chúng tôi có nó, trong trường hợp trang web đó ngoại tuyến.

Dòng lệnh WPA

Đôi khi, bạn sẽ ở một dòng lệnh không có quyền truy cập vào các công cụ mạng GUI - nhưng điểm truy cập của bạn được bảo mật bằng WPA. Bạn làm nghề gì?

Giả sử card không dây của bạn thực sự hoạt động (tức là iwconfig có thể nhìn thấy nó và tương tác với nó), sử dụng wpa_supplicant thực sự khá đơn giản. Cài đặt wpa_supplicant

Hầu hết các bản phân phối hiện nay đều có cài đặt wpa_supplicant theo mặc định. Nếu bạn có sẵn các lệnh wpa_passphrase và wpa_supplicant, thì bạn nên đi. Nếu không, bạn sẽ cần cài đặt gói bằng cách thực hiện một cái gì đó như (đối với Ubuntu):

$ sudo apt-get install wpasupplicant

Hoặc (đối với Fedora):

# yum install wpa_supplicant

Hoặc bất cứ lệnh nào là dành cho bản phân phối của bạn.

Tạo tập tin cấu hình

Bây giờ wpa_supplicant đã được cài đặt, chúng tôi sẽ tạo tệp cấu hình của nó. Khi bạn biết cụm mật khẩu SSID và WPA, tất cả những gì bạn phải làm là chạy:

$ wpa_passphrase myrouter mypassphrase > wpa.conf

Tất nhiên, thay thế "myrouter" bằng SSID của bộ định tuyến của bạn, "mypassph khẩu" bằng cụm mật khẩu WPA và "wpa.conf" bằng bất kỳ tệp nào bạn muốn lưu trữ cấu hình. Tên tệp này không phải theo một định dạng cụ thể hoặc có một phần mở rộng cụ thể.

Ngoài ra, để tránh nhập cụm mật khẩu trên dòng lệnh (để nó không được lưu trong lịch sử của trình bao), bạn có thể chỉ định SSID trên dòng lệnh. wpa_passphrase sẽ đợi bạn nhập cụm mật khẩu theo sau là enter:

$ wpa_passphrase myrouter > wpa.conf
mypassphrase

Bạn nên kết thúc với một tập tin trông như thế này:

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

Kết nối

Bây giờ chúng tôi thực sự sẽ chạy wpa_supplicant để kết nối với mạng không dây. Đầu tiên, nếu bộ định tuyến của bạn phát SSID của nó (tất cả đều làm theo mặc định), bạn có thể muốn đảm bảo rằng thẻ không dây của bạn thực sự có thể nhìn thấy nó:

$ iwlist scan

Bạn có thể phải chạy nó với quyền root để bắt buộc làm mới.

Tiếp theo, bạn sẽ cần biết ba thông tin:

  1. Những trình điều khiển không dây wpa_supplicant sẽ sử dụng cho thẻ của bạn. Chạy wpa_supplicant --helpliệt kê các trình điều khiển khác nhau mà nó có (trong "trình điều khiển:"). Tính đến 0.5.8, các lựa chọn hữu ích là: wext, hostap, madwifi, atmel, ndiswrapper, và ipw(IPW chỉ dành cho kernel cũ;> = 2.6.13 nên sử dụng wext). Nếu bạn không thấy một trận đấu cụ thể cho thẻ của mình, hãy thử wext, vì đó là loại hấp dẫn.
  2. Thiết bị mạng của thẻ của bạn. Đây thường là eth1 hoặc wlan0, nhưng nếu bạn không chắc chắn, bạn có thể chạy iwconfig. Nó sẽ báo cáo "không có tiện ích mở rộng không dây" cho các thiết bị không dây và sẽ hiển thị một số dữ liệu cho mọi thiết bị không dây.
  3. Đường dẫn đến tệp cấu hình mà bạn đã tạo ở bước trước.

Bây giờ bạn có dữ liệu này, hãy chạy (với quyền root):

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

Không có khoảng cách giữa các tùy chọn và tham số. Đừng bao gồm các dấu ngoặc khi tôi vừa thêm chúng vào cho rõ ràng. Ví dụ, đối với máy tính xách tay của tôi, nó trông như thế này:

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

Bạn cũng có thể chạy nó trong nền bằng cách sử dụng -Btùy chọn để nó không chiếm bàn điều khiển của bạn.

Bây giờ bạn được liên kết với mạng.

Bắt đầu trực tuyến

Để thực sự có được trực tuyến, bạn sẽ phải có một IP bằng cách nào đó. Hầu hết mọi người sẽ chỉ muốn nhận một IP động từ máy chủ DHCP, có thể là IP được tích hợp trong bộ định tuyến. (Tôi sẽ không bao gồm cài đặt IP tĩnh và bảng định tuyến vì bản thân nó là một con thú.)

Để có được hợp đồng thuê DHCP, trước tiên hãy phát hành bất cứ thứ gì cho thuê mà bạn vẫn đang giữ (với quyền root):

# dhclient -r

Sau đó yêu cầu một hợp đồng mới (tất nhiên thay thế eth1 bằng tên của thiết bị mạng của bạn, giống như bạn đã sử dụng trong phần trước):

# dhclient eth1

Bây giờ bạn có một IP, trên lý thuyết ít nhất. Chúc bạn lướt sóng vui vẻ!


1
FYI cho những người chưa có kinh nghiệm, hầu hết các tên giao diện thẻ không dây sẽ là wlan <number>, vì vậy, ví dụ, thẻ không dây đầu tiên trong cấu hình của bạn sẽ là wlan0 thay vì eth1
xorinzor 24/12/13

Cảm ơn, lệnh wpa_passphrase đã giúp. Tôi đã thử câu trả lời được chấp nhận nhưng tập tin đã sai, wpa_passphrase đã giúp với điều đó và sau đó tôi mới chuyển lệnh thứ hai từ câu trả lời được chấp nhận (tôi đã biết chắc chắn rằng nó được gọi là wlan0) ...
Lilian A. Moraru

cảm ơn điều đó thực sự tuyệt vời, bạn có thể cho tôi liên kết bao gồm cách thiết lập bảng định tuyến và tĩnh không ... :)
Yassine

1
@AlexandreSchmidt +1 vì đã toàn diện!
John Strood

@JohnStrood, bạn nên cảm ơn bất cứ ai đã viết trang web vì đây là bản sao từ đó
icc97

8

Debian và các bản phân phối khác có wpa_s repeatant chạy như một dịch vụ theo mặc định để quản lý các mạng wifi. wpa_s repeatant có thể được xử lý bởi các máy khách / giao diện người dùng khác nhau, chẳng hạn như GUI của trình quản lý mạng. Điều này được giải thích tốt hơn trong wiki debian này .

wpa_cli là dòng lệnh wpa_s repeatant client để quản lý các mạng wifi.

Chỉnh sửa : Tôi vừa tìm thấy bài đăng này giải thích cách sử dụng nmcli và nó tốt hơn nhiều so với wpa_cli vì nó tương thích với Trình quản lý mạng GUI và các cài đặt của chúng và các mạng wifi đã lưu.

Ví dụ về việc sử dụng wpa_cli :

Kiểm tra xem tôi đã có giao diện mạng kích hoạt wifi chưa:

# 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

Kiểm tra xem quá trình wpa_s repeatant đang chạy:

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

Nhập vào chế độ tương tác máy khách wpa:

# wpa_cli

Liệt kê các điểm truy cập có sẵn:

> scan
> scan_results

... và bạn nhận được một cái gì đó như thế này:

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

Thêm AP của bạn:

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

Chọn nó như hiện tại:

> enable_network 0

Kết nối với nó:

> reconnect

Kiểm tra trạng thái:

> status

Thoát wpa_cli:

> quit

Từ trình bao, yêu cầu DHCP cho cài đặt IP và mạng:

# dhclient -r
# dhclient wlan0

Tại sao bạn nói về wpa_clivà sau đó bạn viết wpa_client? Trên Kubfox 18.10 wpa_clientdường như không tồn tại dưới dạng một lệnh
rtrtrt

Bạn đã đúng ... đã sửa.
David

3

Đầu tiên hãy nâng thẻ của bạn lên nếu không phải là runnig:

ifconfig wlan0 up

Đặt tham số theo mạng của bạn

iwlist wlan0 scan
iwconfig wlan0 essid NETWORK_ID key WIRELESS_KEY

15
Tôi tin rằng điều này chỉ dành cho WEP. Không có WPA;)
Rinzwind

Rinzwind đã đúng. Đây là cho WEP. Xin lỗi vì lỗi te.
LnxSlck

2
không vấn đề gì. Để nó ở đây và một ngày nào đó sẽ có lợi từ câu trả lời của bạn;)
Rinzwind

điều này sẽ hoạt động ngay cả khi không có khóa như mạng mở?
EvoandroidEvo

1
Tôi hy vọng không ai được hưởng lợi từ câu trả lời cụ thể của WEP: '(
Max Ried

2

Thực sự có một cách để làm điều đó bằng NetworkManager, nếu bạn đã checkboxcài đặt gói.

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

(Tín dụng: lỗi 923836 , xuất hiện trong các tìm kiếm của tôi về chủ đề này.)


2

Tất cả các câu trả lời cho thấy wpa_supplicant đều sai. Có, nó có thể kết nối bạn với mạng WPA, nhưng về lâu dài đó là một giải pháp tồi vì sẽ rất khó để duy trì và sẽ không chơi tốt với kết nối có dây. Đọc câu trả lời này và làm cho cuộc sống của bạn dễ dàng hơn bằng cách sử dụng Trình quản lý mạng từ dòng lệnh. Tôi đã lãng phí hàng giờ để cố gắng định cấu hình wpa_supplicant, sau đó thử nmcli và nó "chỉ hoạt động".


2
Vấn đề với những thứ 'chỉ hoạt động' là chúng có thể dễ dàng 'chỉ không hoạt động' và sau đó bạn đang ở đâu. Đối với người CLI, cách tiếp cận wpa_supplicant trực tiếp tốt hơn bởi vì nó phơi bày tất cả các phần của nó. Đức tính tuyệt vời của NM là tất cả các phần của nó được ẩn đi. Vì vậy, thật sai lầm khi nói rằng cách tiếp cận wpa_supplicant là sai. Bạn thích những thứ 'chỉ hoạt động', tốt thôi. Sở thích của bạn là quyền của bạn, nhưng thật bất lịch sự khi nói với mọi người rằng họ sai chỉ vì sở thích của họ không phải là của bạn. Đây là lý do tại sao tôi đánh dấu vào câu trả lời của bạn.
Stephen Boston

2

Bạn có thể sử dụng VSWM - Trình quản lý không dây rất đơn giản. Bạn đặt các AP đã biết của mình vào một tệp cfg đơn giản (/etc/vswm.cfg) và khi bạn chạy vswmnó, quét các mạng có sẵn và kết nối thẻ của bạn với đầu tiên xuất hiện trên /etc/vswm.cfg.

VSWM có sẵn tại https://github.com/dmelo/vswm . Đây là một lựa chọn về cách tệp cấu hình vswm.cfg trông như thế nào:

[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

Trong mũ trùm, nó sử dụng các công cụ dòng lệnh tiêu chuẩn: iwlist, wpa_supplicant, iwconfig, dhclient ... Chỉ có nó tự động hóa công việc.


1

Tôi gặp sự cố khi sử dụng wpa_supplicanttrực tiếp để truy cập mạng không dây. ID mạng và mật khẩu của tôi đã tạo ra lỗi khi tôi sử dụng wpa_supplicant.conftệp trên wpa_supplicantdòng lệnh, vd

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

Tôi đã có thể làm việc xung quanh nó với wpa_cli. Chuỗi lệnh tôi phải sử dụng, vì tôi đang sử dụng trình điều khiển Windows với Linux ndiswrapper, là:

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

Tôi đã thiết lập mạng bằng cách thêm nó vào phần không dây của mạng trong GUI, để tôi có thể nhấp vào biểu tượng mạng có dây hoặc không dây và chọn nhà cung cấp không dây (đôi khi cần thiết để hoàn tất đăng nhập).


1

Đây nmclilà phiên bản dòng lệnh của ứng dụng quản lý mạng mặc định trên Ubuntu.

Một số ưu điểm là nó sử dụng cấu hình bạn đã có từ giao diện đồ họa và nó không cần quyền truy cập root.

Bạn có thể chạy nmcliđể hiển thị các tùy chọn có sẵn.

Ví dụ để kết nối với wifi có tên MYESSID:

    nmcli c up MYESSID   

1
nmcli, nm-applet, và vâng câu trả lời của bạn là tốt nhất nhưng tôi không biết tại sao không ai bình chọn nó
Saeid

@Saeid Cảm ơn bạn!
desgua
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.