【问题标题】:Curl with sudo returns connection refused, but plain curl runs fine带有 sudo 的卷曲返回连接被拒绝,但普通卷曲运行良好
【发布时间】:2019-04-23 20:29:01
【问题描述】:

以下运行良好

curl https://packagecloud.io/install/repositories/github/git-lfs/config_file.list?os=Ubuntu\&dist=xenial\&source=script

但是如果我用sudo 运行它,它会返回一个错误:

curl: (7) Failed to connect to packagecloud.io port 443: Connection refused

为什么?

注意:我支持公司代理。

【问题讨论】:

  • 我会用“-v”运行它并比较“好”和“坏”的输出。可能是查看与套接字关联的进程的 uid 的本地防火墙规则,但我敢打赌,这些用户之间的本地代理设置不同。
  • 尝试sudo -E curl... 保留https_proxy 环境变量或在sudoers 文件中将其列入白名单。
  • @cfillion 您的建议有效。你能给出答案吗?

标签: linux curl windows-subsystem-for-linux


【解决方案1】:

curl 读取<url scheme>_proxy(在本例中为https_proxy)或all_proxy 环境变量来设置要使用的默认代理服务器(如文档中的here)。但是,默认情况下,sudo 在最小环境中执行命令(env_reset 设置)。

可以使用-E (--preserve-env) 命令行选项暂时禁用此安全功能,以便保留现有的环境变量。可以将要列入白名单的各个环境变量指定为逗号分隔的列表:

sudo --preserve-env=https_proxy curl ...

这可以使用sudoers 文件中的env_keep 设置永久化。例如,要为所有用户保留所有以_proxy 结尾的环境变量:

Defaults env_keep += "*_proxy"

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 2022-11-09
    • 2020-12-01
    • 2012-02-28
    • 2017-01-13
    • 2017-03-27
    • 2021-11-03
    • 2017-04-17
    • 2012-04-08
    相关资源
    最近更新 更多