提供带有“@”符号的密码的git URL

5
我想要用用户名和密码运行git命令(比如push命令)。但是密码末尾带有@符号,所以它给出了以下错误信息。

Couldn't resolve host '@github.com'

我的示例git命令如下。
git push https://username:password@@github.com/username/test.git

我认为密码最后的@符号是错误的原因。但无论如何,我想找到一种方法,将此命令作为一步完成,而不需要在第二步输入用户名和密码。


2
任何 URL 中的特殊字符都需要进行 URL 编码。就这些。 - axiac
@axiac 谢谢,它起作用了!!! - Prasad Lakmal
https://dev59.com/uWkw5IYBdhLWcg3wNn6h - hogi
1个回答

9

根据RFC 1738的规定:

"...只有字母数字[0-9a-zA-Z]、特殊字符"$-_.+!*'(),"(不包括引号-ed)以及用于保留目的的保留字符可以在URL中未经编码使用。"

因此,您必须对@字符进行URL编码:

git push https://username:password%40@github.com/username/test.git

然而,这样做是极其不安全的。在HTTP流量中,不仅URL可以清晰地被读取,而且它们会被主机缓存、记录器记录,并且由代理和路由器沿着路径存储在许多方式中。如果密码无法提供身份验证,那么为什么需要密码?如果不需要进行身份验证,请勿使用密码。
此外,在URL中提供密码已被浏览器弃用,例如阅读http://support2.microsoft.com/default.aspx?scid=kb;[LN];834489
有几种更安全的方法可以执行一步推送而无需输入密码,例如使用SSH密钥或git config credential.helper

HTTPS URL是加密的,因为它是HTTP协议的一部分,而HTTP协议位于TLS之上。因此,传递敏感数据是安全的。你可能指的是域名部分没有加密,这是正确的,并且被SNI和DNS使用。 - Maksim Shamihulau
企业代理可以(而且经常)配置为解密和监视所有https/TLS流量。此外,防止恶意攻击者读取https流量的唯一方法是证书。由于流量经常被分析和存档,一旦证书泄漏,即使几个月或几年后也可以解密。因此,请经常更改您的密码,并且最重要的是不要忘记,对安全的最大威胁是方便性。 - Claudio Floreani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接