You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

企业代理环境下如何为GIT_SSH_COMMAND配置多条执行命令

解答

错误原因分析

  • 首次语法报错是因为&是shell后台运行的命令结束符,不需要额外加多余分号,你写的&;;属于非法语法。
  • 修改后的新报错有两个根源:
    1. shell中设置环境变量不需要加set前缀,set PROXY_USER=xxx是错误写法,会导致后续ssh把参数解析为主机名,触发域名解析失败报错。
    2. desproxy后台启动后需要时间完成端口监听,直接执行ssh会遇到端口未就绪的问题;多次运行还会因为2222端口被已有进程占用,触发绑定失败报错。

正确配置方案

临时直接写在GIT_SSH_COMMAND的写法

注意去掉set,加短延迟等待端口就绪:

export GIT_SSH_COMMAND="PROXY_USER=$proxy_user:$proxy_pw desproxy ssh.github.com 443 $proxy_host $proxy_port 2222 >/dev/null 2>&1 & sleep 0.2; ssh"

如果写入git全局配置,需要转义分号:

[core]
    sshCommand = PROXY_USER=$proxy_user:$proxy_pw desproxy ssh.github.com 443 $proxy_host $proxy_port 2222 >/dev/null 2>&1 & sleep 0.2\; ssh

更稳定的封装脚本方案

上述直接写命令的方案会导致每次执行git操作都启动新的desproxy进程,容易残留进程、端口冲突,更推荐封装为独立脚本:

  1. 新建脚本文件~/bin/git-ssh-proxy-wrapper,写入以下内容:
#!/bin/bash
# 检查2222端口是否已被监听,避免重复启动desproxy
if ! nc -z 127.0.0.1 2222; then
    PROXY_USER="$proxy_user:$proxy_pw" desproxy ssh.github.com 443 "$proxy_host" "$proxy_port" 2222 >/dev/null 2>&1 &
    # 等待端口就绪再执行ssh
    until nc -z 127.0.0.1 2222; do sleep 0.1; done
fi
exec ssh "$@"
  1. 给脚本添加执行权限:
chmod +x ~/bin/git-ssh-proxy-wrapper
  1. 配置git使用该脚本作为ssh命令:
git config --global core.sshCommand ~/bin/git-ssh-proxy-wrapper

内容的提问来源于stack exchange,提问作者murchu27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:15:04