내가 이것을 할 때 :
sudo wpa_supplicant -D nl80211,wext -i wlp4s0 -c <(wpa_passphrase "some ssid" "password")
알겠어요
Successfully initialized wpa_supplicant
Failed to open config file '/dev/fd/63', error: No such file or directory
Failed to read or parse configuration '/dev/fd/63'
어떤 아이디어가 있나요?
답변1
프로세스 대체 <(…)
파이프가 있는 파일 설명자와 동일한 경로가 지정된 파이프를 생성하고 /dev/fd
파일 이름을 프로그램에 인수로 전달합니다. 여기서 절차는 sudo
해당 인수(관련된 한 문자열일 뿐임) wpa_supplicant
를 파일 이름으로 처리하는 에 전달하는 것입니다.
문제는 sudo가 표준 파일 설명자(stdin=0, stdout=1 및 stderr=2)를 제외한 모든 파일 설명자를 닫는다는 것입니다. 프로세스가 대체한 파이프는 닫힌 다른 설명자에 있었기 때문에 wpa_supplicant
열려고 할 때 존재하지 않는 파일을 발견했습니다.
sudo 정책에서 허용하는 경우( closefrom_override
활성화 옵션) 파일 설명자를 닫지 않도록 지시할 수 있습니다. 그러나 일반적으로 그렇지 않습니다.
sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)
또는 stdin을 사용하지 않으므로 거기에 데이터를 전달하십시오.
wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin
또는 sudo에서 쉘을 실행하고 거기에 프로세스 대체를 넣으십시오. 명령에 특수 문자가 포함된 경우 인용할 때 주의하세요.
sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'
답변2
인용하다아치리눅스 위키:
참고: 프로세스 대체 때문에 sudo를 사용하여 이 명령을 실행할 수 없습니다. 루트 쉘이 필요합니다.
su -c
다음과 같이 사용할 수 있어야 합니다 sudo
.
$ sudo su -c 'wpa_supplicant -D nl80211,wext -i wlp4s0 -c \
<(wpa_passphrase "some ssid" "password")'
답변3
웹 검색 엔진을 통해 오시는 경우: 검색 엔진이 /dev
설치되어 있는지 확인하세요. chrooting을 할 때 실수하기가 쉽고, 이로 인해 이와 같은 오류가 발생할 수 있습니다.