繁体   English   中英

为 GIT_SSH_COMMAND 指定多个命令

[英]Specifying multiple commands for GIT_SSH_COMMAND

背景

我在工作中使用的大多数系统只能在公司 LAN 或 VPN 上使用。 在连接到这些网络时,我通过代理连接 go,该代理受 HTTP 基本授权保护。

但是,我的一个项目要求我使用 SSH 密钥连接到 GitHub。 在公司网络/VPN 之外(即没有代理),这一切都设置好并且工作正常,但我也一直在尝试让它在该网络内工作,因为我不想保留断开并重新连接 VPN 以访问前面提到的其他受保护系统。 我已经非常接近了。

许多文章和 SO 答案鼓励在我的.ssh/config中为 github.com 添加一个条目,并将ProxyCommand选项与nccorkscrew之类的东西一起使用。 但是这些似乎都不能很好地满足我的代理对身份验证的要求。 一个desproxy

我可以使用以下 ssh 配置成功连接到 VPN 后面的 GitHub 存储库:

Host github.com
    IdentityFile <key>
    HostName 127.0.0.1
    Port 2222

然后运行以下命令:

set PROXY_USER=$proxy_user:$proxy_pw
desproxy ssh.github.com 443 $proxy_host $proxy_port 2222 &
git clone git@github.com:<user>/<repo>.git

问题

现在,每当我使用 SSH 克隆时,我想要某种方式来运行这些命令。 我不想要git的别名,因为每次我运行 git 命令时, desproxy都会启动 - 它应该只在运行git clone|fetch|push|etc远程启动时启动。 据我了解,这是GIT_SSH_COMMAND环境变量或core.sshCommand git 配置变量的目的。

我遇到困难的地方 - 我有多个命令需要在ssh之前运行,所以我希望我的配置看起来像以下之一:

# environment variable
export GIT_SSH_COMMAND="set PROXY_USER=$proxy_user:$proxy_pw; desproxy ssh.github.com 443 $proxy_host $proxy_port 2222 &; ssh"

# git configuration variable (using '\;' instead of ';' as that is used for comments in git configuration file)
[core]
    sshCommand = set PROXY_USER=$proxy_user:$proxy_pw\; desproxy ssh.github.com 443 $proxy_host $proxy_port 2222 &\; ssh

但是这两种方法都失败了

# environment variable
❯ git clone git@github.com:<user>/<repo>.git
Cloning into '<repo>'...
set PROXY_USER=$proxy_user:$proxy_pw; desproxy ssh.github.com 443 $proxy_host $proxy_port 2222 &; ssh: 1: Syntax error: ";" unexpected
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

# git configuration variable 
❯ git clone git@github.com:<user>/<repo>.git
fatal: bad config line 6 in file /home/murchu27/.gitconfig

那么,为GIT_SSH_COMMAND使用多个命令的正确方法是什么?


更新

我尝试了@phd 的建议,即在我的GIT_SSH_COMMAND中省略和号后的分号; 即,使用以下内容:

export GIT_SSH_COMMAND="set PROXY_USER=$proxy_user:$proxy_pw; desproxy ssh.github.com 443 $proxy_host $proxy_port 2222 & ssh"

但是,我现在收到一个新错误:

❯ git clone git@github.com:<user>/<repo>.git
Cloning into '<repo>'...
bind: Address already in use
fatal: protocol error: bad line length character:
---
Pseudo-terminal will not be allocated because stdin is not a terminal.
ssh: Could not resolve hostname PROXY_USER=<proxy_user>:<proxy_pw>: Name or service not known

语法错误:“;” 意外

错误来自 shell。 完全省略分号, &本身就是一个命令分隔符:

export GIT_SSH_COMMAND="set PROXY_USER=$proxy_user:$proxy_pw; desproxy ssh.github.com 443 $proxy_host $proxy_port 2222 & ssh"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM