환경 변수가 sudo에서 작동하지 않는 것 같습니다.

환경 변수가 sudo에서 작동하지 않는 것 같습니다.

저는 방화벽 뒤에서 apt를 사용하고 있으므로 http_proxy환경 변수에 프록시를 지정합니다.

내가 한 일은 루트 사용자의 합계에 다음 줄을 추가하는 것이었습니다 .profile(좋은 측정을 위해)..bashrc

export http_proxy=http://proxyserver:8080

다음을 수행하면 에이전트 값이 올바르게 인쇄됩니다.

sudo echo $http_proxy

그런데 을 호출하면 해당 변수가 루트로 표시 sudo apt-get update되지 않는 것 같습니다 .http_proxy

프록시를 통과하는 것은 내가 root 로 su할 때만 예상대로 작동하므로 apt-get분명히 변수를 볼 수 있습니다.

제 질문은 위에서 언급했듯이 왜 sudo apt-get변수를 볼 수 없습니까? 입니다.

고쳐 쓰다방금 를 호출하면 sudo echo현재 사용자 프로필에 설정된 변수 값이 반영된다는 것을 배웠습니다. 하지만 그럼에도 불구하고 sudo apt-get해당 변수 값을 사용하면 어떨까요?

답변1

sudo apt-get이 경우에는 "작동하지 않는 것 같습니다"가 아니라작동하는 것 같습니다당신이 이것을 할 때 sudo echo $http_proxy.

쉘 명령을 입력하면 모든 변수와 별칭이 전역화되고 확장됩니다.앞으로실행됩니다.

그러면 더 부드러워 sudo echo $http_proxy집니다 sudo echo http://proxyserver:8080.

$http_proxy표시되지 않는 이유는 apt-get지시문 sudo에 명시적으로 허용된 환경 변수를 제외한 모든 환경 변수가 지워지기 때문입니다./etc/sudoersenv_keep

환경 변수가 처리되는 방식을 조작하는 방법 sudo(또는 일반적으로 환경 변수가 처리되는 방식) 에 대한 자세한 내용은아니요)은 에서 찾을 수 있습니다 man sudoers.

답변2

이것이 제가 결정한 것이므로 이 경우 더 나은 해결책은 /etc/apt/apt.conf프록시에 대한 줄을 추가하도록 수정하는 것입니다.

Acquire::http::Proxy "http://yourproxyaddress:proxyport";

시스템은 거의 영구적으로 프록시 뒤에 있으므로 http_proxy환경 변수를 사용하는 것보다 장기적으로 더 나은 솔루션입니다.

답변3

아, 방금 이 페이지에서 뭔가를 봤어요:

https://help.ubuntu.com/community/AptGet/Howto#Setting_up_apt-get_to_use_a_http-proxy

일반적으로 sudo로 apt-get을 실행하는 경우 /etc/sudoers에 다음과 같은 명시적인 환경 설정을 추가하지 않는 한 먼저 루트로 로그인해야 이 작업이 작동합니다.

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

이렇게 해야 하는 이유는 sudo모든 환경 변수가 의도적으로 지워지기 때문입니다.목례따라서 기본적인 보안 예방 조치로 화이트리스트에 추가하세요.

답변4

내 생각에는 sudo의 "-E" 옵션만 사용해야 한다고 생각합니다.

sudo -E echo $http_proxy

관련 정보