Git Clone报错Illegal Port Number:AWS Linux EC2脚本克隆问题
解决Git Clone携带用户名密码时的"Illegal port number"错误
嘿,这个问题我遇到过!你碰到的Illegal port number错误,大概率是密码里的特殊字符搞的鬼,咱们一步步来拆解原因和解决办法:
问题根源
当你在脚本里直接把用户名和密码拼进Git的HTTPS URL时,如果密码包含了@、:、/、%这类URL特殊字符,Git会错误地解析这些字符——比如把密码里的@当成「用户名密码」和「主机地址」的分隔符,导致后面的gitlab.com被错误识别成端口相关的内容,从而抛出非法端口号的错误。而手动输入用户名再输密码时,Git是单独处理密码输入的,不会走URL解析那一套,所以能正常工作。
解决办法
1. 对密码中的特殊字符进行URL编码
把密码里的特殊字符替换成对应的URL编码值,常见的编码对应关系:
@→%40:→%3A/→%2F%→%25&→%26
举个例子,如果你的密码是MyPass@123:abc,编码后就变成MyPass%40123%3Aabc,然后克隆命令改成:
git clone https://username:MyPass%40123%3Aabc@gitlab.com/user/repo.git
2. 使用环境变量传递凭据(更安全)
避免在命令行里明文写密码,用Git支持的环境变量来传递用户名和密码,这样既不用处理特殊字符,也更安全。在bash脚本里这么写:
# 设置环境变量 export GIT_USERNAME="your_username" export GIT_PASSWORD="your_raw_password_with_special_chars" # 直接克隆,Git会自动使用环境变量里的凭据 git clone https://gitlab.com/user/repo.git
3. 配置Git凭据助手(长期使用推荐)
如果这个EC2实例是你长期用的,配置Git凭据助手可以永久保存凭据,后续克隆、拉取推送都不用再输密码:
# 配置凭据助手,把凭据保存到本地文件 git config --global credential.helper store
执行完这个命令后,手动克隆一次仓库(输入用户名和密码),Git会把凭据加密保存到~/.git-credentials文件里,之后不管是手动还是脚本执行Git操作,都会自动读取凭据,再也不会碰到这个错误了。
注意事项
- 尽量不要在脚本里明文写密码,避免密码泄露;优先用环境变量或者凭据助手。
- 如果密码里的特殊字符很多,URL编码容易出错,环境变量是更省心的选择。
内容的提问来源于stack exchange,提问作者Miika
相关产品推荐
相关产品推荐

