構成ファイル '/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 …)'

おすすめ記事