V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
xiaopanzi
V2EX  ›  git

Git 偶发性(大概率)报错: kex_exchange_identification: Connection closed by remote host

  •  
  •   xiaopanzi · 2022-03-29 20:49:29 +08:00 · 954 次点击
    这是一个创建于 965 天前的主题,其中的信息可能已经有所发展或是发生改变。

    通过.ssh/config配置了代理:

    Host github.com
        HostName github.com
        User git
        IdentityFile ~/.ssh/id_ed25519
        ProxyCommand nc -X 5 -x 127.0.0.1:7890 %h %p% 
    

    但是偶发性且大概率在git pull/push的时候会报错,但重复多次又能成功。排除是配置问题,否则不可能会偶尔成功。所以是我梯子问题?下面是连续两次git push的结果,先失败,然后成功:

    img

    图片: https://ibb.co/qBWTzym

    请问大家是否有解决思路?

    第 1 条附言  ·  2022-03-30 09:56:55 +08:00
    感谢大家的帮助。换成 443 果然就行了。应该是代理服务器偶发性禁止了 22 端口。
    14 条回复    2022-03-30 11:21:18 +08:00
    defunct9
        1
    defunct9  
       2022-03-29 20:54:17 +08:00
    为啥不直接用
    git config --global http.proxy <address>:<port>

    而非要用 nc 去转一下呢
    shawndev
        2
    shawndev  
       2022-03-29 20:59:54 +08:00 via Android
    @defunct9 因为在意 ssh 的安全性? https proxy 毕竟相当于套了 mitm
    xiaopanzi
        3
    xiaopanzi  
    OP
       2022-03-29 21:01:46 +08:00
    @defunct9 看了一些资料,设置 http.proxy 对 git 协议无效,只能支持 http/https ,即不支持 SSH URLs (i.e., [email protected]:<user name>/<project name>.git)
    learningman
        4
    learningman  
       2022-03-29 21:30:47 +08:00
    @shawndev #2 https proxy 也是直接转发 tcp 的,不会 mitm 吧
    ysc3839
        5
    ysc3839  
       2022-03-29 21:31:57 +08:00 via Android
    @shawndev http/https proxy 对于非 http 协议都不会进行 MITM ,会使用 CONNECT 请求直接连接目标服务器,传输的是 TLS 加密后的数据。
    Kasumi20
        6
    Kasumi20  
       2022-03-29 21:37:03 +08:00
    $ cat .ssh/config
    ProxyCommand nc -x 127.0.0.1:1108 %h %p

    我就一行命令, 从来没发生过问题
    ncepuzs
        7
    ncepuzs  
       2022-03-29 22:07:33 +08:00
    @defunct9 这种代理设置对于 [email protected] 连接方式无效吧

    @Kasumi20 你这不过是默认所有连接都走代理了

    @xiaopanzi 可以试试 ssh.github.com

    ```
    Host ssh_github
    HostName ssh.github.com
    # Port 443
    User git
    ProxyCommand connect -S 127.0.0.1:1080 -a none %h %p
    ```
    Host: 可以自由设置,相当于 alias ,例如可以直接 ssh dev 连上开发机
    ncepuzs
        8
    ncepuzs  
       2022-03-29 22:11:43 +08:00
    靠,怎么缩进都没了,补个图。
    如有不对的地方,请大佬指出。

    chenxytw
        9
    chenxytw  
       2022-03-29 22:42:33 +08:00
    dns 过代理了么?
    zxw567
        10
    zxw567  
       2022-03-29 22:56:40 +08:00
    这和隔壁帖子说的情况貌似一模一样,端口换成 443 应该就行了。梯子对 22 端口做了限制
    https://www.v2ex.com/t/843383#reply47
    shawndev
        11
    shawndev  
       2022-03-30 09:48:58 +08:00
    @ysc3839 受教了,考虑到 git config http.proxy 指向电脑端配置的基于规则的代理,并设置类似于自动移除请求参数 affiliate 的规则。

    讨教一下。正常情况下 HTTPS 只能通过 SNI 获取到域名,而获取不到参数,那么此处是否算发生了 MitM ?
    ysc3839
        12
    ysc3839  
       2022-03-30 10:41:43 +08:00 via Android
    @shawndev https 修改不了请求参数,没有 MITM
    ysc3839
        14
    ysc3839  
       2022-03-30 11:21:18 +08:00
    @shawndev 简单看了下,里面并没有提到 https MITM
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1385 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:45 · PVG 07:45 · LAX 15:45 · JFK 18:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.