구성 파일 '/dev/fd/63'을 열 수 없습니다. 오류: wpa_supplicant에 해당 파일이나 디렉터리가 없습니다.

구성 파일 '/dev/fd/63'을 열 수 없습니다. 오류: wpa_supplicant에 해당 파일이나 디렉터리가 없습니다.

내가 이것을 할 때 :

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을 할 때 실수하기가 쉽고, 이로 인해 이와 같은 오류가 발생할 수 있습니다.

관련 정보