Android Studio连接GitHub时SSH登录反复被拒问题排查求助
故障背景
已在Android Studio中完成GitHub公私钥登录配置,更换互联网服务提供商后功能出现异常:每次使用Android Studio后SSH登录都会被拒绝,次日尝试向远程仓库推送代码变更时抛出如下错误:
git -c credential.helper= -c core.quotepath=false -c log.showSignature=false push --progress --porcelain origin refs/heads/main:main Invocation failed Unexpected end of file from server java.lang.RuntimeException: Invocation failed Unexpected end of file from server at git4idea.GitAppUtil.sendXmlRequest(GitAppUtil.java:30) at git4idea.http.GitAskPassApp.main(GitAskPassApp.java:58) Caused by: java.net.SocketException: Unexpected end of file from server at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:866) at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689) at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:863) at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1615) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520) at org.apache.xmlrpc.DefaultXmlRpcTransport.sendXmlRpc(DefaultXmlRpcTransport.java:87) at org.apache.xmlrpc.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:72) at org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:194) at org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:185) at org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:178) at git4idea.GitAppUtil.sendXmlRequest(GitAppUtil.java:27) ... 1 more error: unable to read askpass response from '/home/marcell/.cache/Google/AndroidStudio2021.2/tmp/intellij-git-askpass-local.sh' fatal: could not read Password for 'https://BallaMarcell@github.com': No such device or address
出现报错后必须重新生成SSH密钥并添加到GitHub才能恢复认证功能,严重影响开发效率,暂未定位到故障根因。
初步排查结论
经初步排查发现Android Studio使用了错误的认证URL,正确的认证URL应携带GitHub个人访问令牌(Personal Access Token, PAT),且URL末尾需附带对应仓库名称,正确格式示例如下:
https://ghp_thisiswherethepatshouldbe@github.com/username/reponame
排查修复方向
- 先核对远程仓库地址:进入项目根目录执行
git remote -v查看当前origin配置。如果地址是HTTPS格式,本身就不会走SSH密钥认证逻辑,和你之前配置的公私钥完全不匹配,执行git remote set-url origin git@github.com:你的GitHub用户名/对应仓库名.git切回SSH格式地址即可,不需要反复生成新密钥。 - 脱离IDE测试SSH连通性:直接在系统终端执行
ssh -T git@github.com验证连接状态。如果终端测试也返回连接失败,优先排查新运营商网络是否拦截22端口、本地~/.ssh/config配置是否存在失效的代理规则、本地存储的GitHub主机密钥是否因为网络切换校验不通过。如果确认22端口被运营商拦截,可在SSH配置中添加GitHub 443端口的SSH转发规则,无需重新生成密钥。 - 清理IDE失效认证缓存:报错中提示无法读取askpass响应,是Android Studio内置的Git认证临时脚本在网络切换后,读取到已失效的旧认证缓存导致的。先进入Android Studio设置页的Version Control > Git选项,确认IDE调用的Git路径是本地系统安装的正式版本,而非IDE内置的旧版本Git;再进入System Settings > Passwords页面清空之前存储的所有GitHub认证缓存,重启IDE后重新完成账号授权即可。
- 避免认证方式混用:之前每次重新生成密钥就能临时恢复,本质是生成新密钥的操作触发了IDE重新拉取认证配置,并没有解决远程地址错配、端口拦截、缓存失效的根因。反复生成密钥还会导致本地
.ssh目录下留存大量无效密钥配置、known_hosts记录冗余,反而会提高认证异常的出现概率。
内容的提问来源于stack exchange,提问作者Marcell
相关产品推荐
相关产品推荐

