簡體   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