【发布时间】:2013-11-22 23:43:07
【问题描述】:
我正在尝试在 bash 中添加带有身份验证参数的代理,其中我的密码包含 @ 符号。在 bash 中添加带身份验证的代理的语法如下:
export http_proxy=http://username:password@host:port_no/
因此,每当我尝试添加包含@ 的密码时,使用此代理的应用程序都会尝试连接到密码中后跟@ 符号的字符串。
例如,如果我的密码是p@ssword,主机是proxy.college.com,应用程序会尝试连接到ssword@proxy.college.com。
我尝试使用\ 转义@ 符号,但这并没有解决。
如何在不更改密码的情况下完成这项工作?
注意:此问题与How can i escape an arbitrary string for use as a command line argument in bash 或How to escape the at sign in bash 不同,因为这专门处理在已经存在@ 符号的命令中出现的“@”符号,并且@ 用于将给定字符串分隔为特定参数。
P.S.:虽然使用 HTML 代码 %40 代替 @ 可行,但我更喜欢可读性更高的方法。
【问题讨论】:
-
我会更改密码 ;-)
-
这样做不是很不干净吗?
-
为什么你需要这样写你的登录密码?什么应用程序迫使您这样做?这可能是一个可怕的安全问题。请阅读您正在使用的应用程序的
man页面,检查是否有可能以不同的方式发送密码,或者以其他方式切换到另一个应用程序。 -
是的,我接受这是一个安全问题,但大多数应用程序,包括
apt-get应用程序都需要/etc/apt/apt.conf文件中的用户名和密码。其他人则从/etc/environment或/home/$USER/.bashrc中指定的环境变量中获取它。虽然不是这个问题的一部分,但我很乐意接受其他已知的安全方法。 -
这不是关于 shell 的问题(它不需要在这种情况下转义
@),而是关于使用http_proxy变量的任何程序。如果 HTML 编码是让它接受文字@的唯一方法,那就是你必须做的。