我正在使用tsocks
socksify 来处理我的连接。当我运行以下命令时,apt-get
没有使用 socksify:
$ . tsocks -on
$ sudo apt-get update
但是,当我像下面这样在一行中运行整个程序时,它就可以工作了。
sudo tsocks apt-get update
我已经验证,当我输入时. tsocks -on
,我的LD_PRELOAD
环境变量设置为/usr/lib/libtsocks.so
。
为什么前者不起作用?
答案1
虽然它已经给出了答案,但我还是想分享对我有用的方法,使用 Ubuntu 14.04:
sudo apt-get install tsocks
然后打开 /etc/tsocks.conf 并将您的服务器添加到服务器,将端口添加到 server_port,还要将您的 socks 服务器范围添加为本地,例如,
如果您的 ip 地址是 90.70.60.5,则写入:(
local = 90.70.60.0/255.255.255.0
注意 .0 是 ip 地址的最后一部分)
现在尝试:(
sudo tsocks apt-get update
或任何 apt-get 命令)
如果使用 sudo 不起作用,请直接以 root 身份登录,例如:
sudo su
然后重试:
tsocks apt-get update
我位于 Socks 5 服务器后面,可以访问从我自己的计算机无法访问的下载链接,而且它运行顺畅。
笔记:有了这个,我就不必使用 /etc/apt/apt.conf 中的“Acquire”内容了
答案2
根据@creveti-mihai 给出的答案,我查看了sudoers
手册页。不幸的是,正如手册页所述,无法保留LD_*
变量。以下是手册页的内容:
Note that the dynamic linker on most operating systems will remove variables that can control dynamic linking from the environment of setuid executables, including sudo. Depending on the operating system this may include _RLD*, DYLD_*, LD_*, LDR_*, LIBPATH, SHLIB_PATH, and others. These type of variables are removed from the environment before sudo even begins execution and, as such, it is not possible for sudo to preserve them.
因此,我必须考虑使用Acquire::http::proxy
和在 apt 自己的配置文件中指定代理Acquire::https::proxy
。
答案3
根LD_PRELOAD
也设置为了吗/usr/lib/libtsocks.so
?看一下:
-E
的 (保留环境) 选项。sudo
例如:sudo -E bash -c 'echo $LD_PRELOAD'
vssudo echo $LD_PRELOAD
;- 文件
sudoers
:Defaults env_keep
;