WPAD で proxy を提供されてる環境で、ユーザー環境では WPAD や
IWebProxy.GetProxy() で proxy の自力解決をして環境変数に自動設定するよう細工をしてるんだけど、apt 等で sudo する proxy の環境変数が渡らずいろいろと面倒でいけない。
apt で WPAD や
PAC 処理できないものかと「
apt proxy PAC」でググってみたところ、以下のページを見つけた。
WPAD や PAC を直接処理するわけじゃないんだけど、/etc/sudoers に
Defaults env_keep+="http_proxy https_proxy no_proxy"
渡しとけば、ユーザー環境の proxy 関連の環境変数を sudo に引き継げるぞとのこと。
という事で自動設定スクリプト作った。
_ ()
# Export proxy to sudo
{
local f="/etc/sudoers"; f=( "$f"{,$(date -r "$f" +,%Y%m%d_%H%M%S)} )
local s=$'Defaults\tenv_keep+="ftp_proxy http_proxy https_proxy no_proxy"'
sudo grep -a "$s" "$f" || {
sudo cp -av "${f[@]}"
sudo awk -vs="$s" '/^Defaults/{a=1;n--}{n+=a}n==1{print s}1' "${f[1]}" | sudo tee "$f" >/dev/null
}
unset -f "$FUNCNAME"
}
_
↓ one liner 版
_ () { local f="/etc/sudoers"; f=( "$f"{,$(date -r "$f" +,%Y%m%d_%H%M%S)} ); local s=$'Defaults\tenv_keep+="ftp_proxy http_proxy https_proxy no_proxy"'; sudo grep -a "$s" "$f" || { sudo cp -av "${f[@]}"; sudo awk -vs="$s" '/^Defaults/{a=1;n--}{n+=a}n==1{print s}1' "${f[1]}" | sudo tee "$f" >/dev/null; }; unset -f "$FUNCNAME"; }; _
2022-04-07: 追記
ふと気が付いたのだが、あれ? 昨日これやってる最中 TAB で入力補間した際に /etc/sudoers.d とかちょくちょく出て来てなかったか? と。
確認してみると、
や manpage に説明があった。
曰く、
- Debian version 1.7.2p1-1 で標準の /etc/sudoers に「#includedir /etc/sudoers.d」ディレクティブが追加されたよ。
- 末尾が ~ または . を含むファイルは処理対象外だよ。
と。
Debian 言われてるけど、Ubuntu 20.04.3 LTS もこれに該当する。
「#includedir」の頭の # は一見コメントのようだが、これも含めてディレクティブなんだそうな。
という事で、上記のように /etc/sudoers 書き換える必要は全くなくて、以下のようにするだけで良かったという落ちが付いたのであった。
sudo tee /etc/sudoers.d/inherit_proxy <<<$'Defaults\tenv_keep+="ftp_proxy http_proxy https_proxy no_proxy"'
sudo chmod 440 /etc/sudoers.d/inherit_proxy
/2022-04-07: 追記
2022-04-18: 追記
文字数最適化の試行錯誤
i=/etc/sudoers.d/inherit_proxy;sudo tee $i<<<$'Defaults\tenv_keep+="ftp_proxy http_proxy https_proxy no_proxy"';sudo chmod 440 $i
(i=/etc/sudoers.d/inherit_proxy;sudo tee $i<<<$'Defaults\tenv_keep+="ftp_proxy http_proxy https_proxy no_proxy"';sudo chmod 440 $i)
sudo sh -c "tee \$0<<<$'Defaults\tenv_keep+=\"ftp_proxy http_proxy https_proxy no_proxy\"';chmod 440 \$0" /etc/sudoers.d/inherit_proxy
sudo sh -c $'tee $0<<<$\'Defaults\tenv_keep+="ftp_proxy http_proxy https_proxy no_proxy"\';chmod 440 $0' /etc/sudoers.d/inherit_proxy
printf 'Defaults\tenv_keep+="%s_proxy"\n' {f,ht}tp{,s} no|sudo sh -c 'cat>$0;chmod 440 $0' /etc/sudoers.d/inherit_proxy
sudo sh -c '$@>$0;chmod 440 $0' /etc/sudoers.d/inherit_proxy printf 'Defaults\tenv_keep+="%s_proxy"\n' {f,ht}tp{,s} no
sudo sh -c 'printf $@>$0;chmod 440 $0' /etc/sudoers.d/inherit_proxy 'Defaults\tenv_keep+="%s_proxy"\n' {f,ht}tp{,s} no
sudo sh -c 'printf $@>$0;chmod 440 $0' /etc/sudoers.d/inherit_proxy 'Defaults\tenv_keep+=%s_proxy\n' {f,ht}tp{,s} no
(i=/etc/sudoers.d/inherit_proxy;printf 'Defaults\tenv_keep+=%s_proxy\n' {f,ht}tp{,s} no|sudo tee $i;sudo chmod 440 $i)
i=/etc/sudoers.d/inherit_proxy;printf 'Defaults\tenv_keep+=%s_proxy\n' {f,ht}tp{,s} no|sudo tee $i;sudo chmod 440 $i
結果
sudo sh -c 'printf $@>$0;chmod 440 $0' /etc/sudoers.d/inherit_proxy 'Defaults\tenv_keep+=%s_proxy\n' {f,ht}tp{,s} no
/2022-04-18: 追記