解决配置代理后sudo仍无法正常使用代理的问题
前言
今日在WSL中安装Ros2的时候发现使用下面命令添加ROS2 GPG key的时候下载失败。
1 | sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg |
终端提示curl: (6) Could not resolve host: raw.githubusercontent.com
于是我想到为WSL配置代理
为WSL添加代理
在主机打开代理软件后,在WSL终端中输入以下命令
1 | export all_proxy="socks5://172.29.80.1:10808" |
再次尝试使用curl下载key发现依然失败。同时,我发现直接curl www.google.com
是有正常的输出的,说明代理是正常配置的。
思索并查了一下资料,了解到通过export
添加的环境变量只对当前用户生效,对于sudo指令,sudo执行时会重置环境变量
解决办法
知道原因后就简单了,下面列举两种解决办法
1. 利用sudo -E 使用当前的环境变量执行命令
1 | sudo -E curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg |
但每次想要通过代理使用sudo时,都需要加上 ‘-E‘ 这个参数。
2. 通过visudo编辑sudoers文件,将all_proxy环境变量保留到sudo中
visudo是Linux下专门编辑sudoers文件的工具,因为直接通过vi /etc/sudoers修改,如果添加的规则有误将会直接导致sudo无法使用。
通过visudo工具编辑sudoes文件,在保存时会检测并提示错误
命令行打开visudo后,在编辑器中添加一行Defaults env_keep += "all_proxy"
,如下所示
1 | # |
使用Ctrl+o
回车保存tmp文件,Ctrl+x
退出编辑器。
如果规则无误的话则会自动将sudoers.tmp文件保存为sudoers。
保存后可以通过sudo cat /etc/sudoers
看看是否保存成功。
再次使用下面命令
1 | sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg |
发现已经可以正常使用代理了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咸鱼成长小站!
评论