(수백 가지가 있기 때문에 시도한 실제 단계에 대해 의도적으로 부정확합니다. BASH 기록의 규모를 살펴봤기 때문에 알고 있습니다.)
CentOS 7, 네트워크 관리자
(아래 오류는 수정해주세요)
고객 환경에는 SSID가 동일한 AP가 여러 개 있습니다. Linux 상자를 각 AP에 차례로 연결하고 명령을 실행하여 데이터를 수집한 다음 다음 AP로 이동하고 청소하고 헹구고 반복하는 BASH 스크립트를 작성해야 했습니다. BSSID는 연결에 사용되는 확실한 것입니다. 스크립트로서의 스크립트는 제대로 작동하지만 BSSID 기반 Wi-Fi 연결 비트는 작동하지 않습니다.
iw, iwconfig, nmcli 및 wpa_supplicant를 시도했지만 내가 지정한 BSSID에 안정적으로 연결할 수 없습니다. 연결된 실제 BSSID는 명령에 무엇을 입력하든 무작위인 것 같습니다. 내가 수집한 것에서 wpa_supplicant를 제외한 모든 도구는 단순히 BSSID를 가져와 SSID와 연결한 다음 연결 설정에서 SSID를 사용합니다. 정확하다면 (직접 말하면) 약간 어리석은 것처럼 보입니다.
wpa_supplicant는 이런 방식으로 사용하기에는 너무 취약합니다. 항상 wpa_cli가 연결할 수 없는 상태가 되고 계속 다시 시작해야 하며 종종 NetworkManager를 다시 시작해야 합니다.
Python으로 전환하는 것을 고려했지만 Python 모듈은 Linux 명령을 둘러싼 래퍼인 것 같아서 아무것도 변경되지 않습니다.
누구든지 아이디어가 있으면 전달해주세요. 이것이 너무 어렵다는 것을 믿을 수 없으므로 분명한 것이 빠져 있는 것 같습니다...
아래 Eduardo의 솔루션을 시도했습니다.
제공된 방식으로는 정확하게 달성할 수 없습니다. MAC 주소/BSSID가 변수인(SSID 및 비밀번호/psk는 정적임) 쉘 스크립트에서 연결 시도 루프를 실행하고 있습니다.
연결하는 데 사용하는 명령은 다음과 같습니다.
nmcli connection up ifname wlp4s0 ap $AP passwd-file passwdfile
여기서 passwdfile에는 psk가 포함되어 있습니다. 이것은 $AP 목록을 통한 루프입니다.
목록에 있는 임의의 AP에 여전히 연결되어 있습니다. (아마 당시 가장 좋은 신호를 가진 신호일 것입니다), (나에게) 더 혼란스러운 것은 이벤트 iw
가 다음과의 연결 BSSID를 표시한다는 것입니다.
nmcli -f SSID,BSSID,ACTIVE dev wifi list | grep yes
내가 제대로 하고 있지 않다는 매우 명백한 뭔가가 있을 것입니다(이것은 나에게 여전히 새로운 것입니다).
답변1
일반 ASCII 비밀번호만 제공하는 경우 wpa_supplicant
SSID에서 64자리 16진수 PSK(실제 비밀번호 중 하나)가 파생되므로 SSID를 찾아야 합니다. 이 시점에서 SSID 모드로 들어갑니다.
따라서 해결책은 BSSID를 지정하고64개의 16진수 PSK비밀번호.
다음을 실행하여 64자리 16진수 PSK를 얻을 수 있습니다.
wpa_passphrase YourSSID YourAsciiPassword
예를 들어:
$ wpa_passphrase Example myexample
network={
ssid="Example"
#psk="myexample"
psk=e22b519be7138dce1d81d1b67b622a720774f22753f79f954376e6e2b722e2c7
}
그런 다음 SSID 대신 BSSID를 사용하면 다음과 같은 결과가 나타납니다.
network={
bssid=EE:FF:00:01:02:03
psk=e22b519be7138dce1d81d1b67b622a720774f22753f79f954376e6e2b722e2c7
}
이렇게 하면 해당 BSSID에 연결할 수 있습니다.
답변2
내 사용 사례는 약간 다르지만 올바른 방향으로 솔루션을 제공한 Eduardo Trapani에게 큰 감사를 전하고 싶습니다. 내 사용 사례는 위층 모뎀 옆에 있는 기본 라우터와 내 망원경을 제어하는 Raspberry Pi 5 외부를 가리키는 아래층 창에 있는 Nest AP가 있는 Google Nest 라우터-액세스 포인트 쌍입니다.
Eduardo의 솔루션 중 이 부분은 절대적으로 필요합니다.
$ wpa_passphrase Example myexample
network={
ssid="Example"
#psk="myexample"
psk=e22b519be7138dce1d81d1b67b622a720774f22753f79f954376e6e2b722e2c7
}
이 단계는 매우 중요합니다. 그러나 그가 wpa_passphrase 명령의 출력에서 생성한 네트워크 조각을 어떻게 해야 할지 잘 모르겠습니다.
network={
bssid=EE:FF:00:01:02:03
psk=e22b519be7138dce1d81d1b67b622a720774f22753f79f954376e6e2b722e2c7
}
그것은 매우 간단하다는 것이 밝혀졌습니다. 방금 내 시스템의 네트워크 GUI에 네트워크를 추가하고 BSSID(액세스 포인트의 MAC 주소)와 비밀번호(wpa_passphrase 명령의 출력)를 입력했습니다. 실제로 작동했습니다. 내 mbps는 8에서 245로 늘어났습니다!
내 원래 네트워크는 Hannah였으며 Pi는 더 나은 연결을 찾아야 했지만 어떤 이유로든 찾지 못했습니다. 그러나 위와 같이 정의된 두 번째 네트워크 Hannah-2를 사용하면 쉽게 찾을 수 있습니다.