我在工作中使用的大多數係統只能在公司 LAN 或 VPN 上使用。在連接到這些網絡時,我的連接通過一個受 HTTP 基本授權保護的代理。
但是,我的一個項目要求我使用 SSH 密鑰連接到 GitHub。當在公司網絡/VPN 之外(即沒有代理)時,這一切都已設置好並且工作正常,但我也一直試圖讓它在該網絡內工作,因為我不想保留斷開並重新連接 VPN 以訪問前面提到的其他受保護系統。我已經很接近了。
許多文章和 SO 答案都鼓勵在 my .ssh/config
for github.com 中添加一個條目,並將該ProxyCommand
選項與nc
或 之類的內容一起使用corkscrew
。但是這些似乎都不能很好地滿足我的代理對身份驗證的要求。在一個工具,它已經工作的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 [email protected]:<user>/<repo>.git
現在,每當我使用 SSH 進行克隆時,我都想要某種方式來運行這些命令。我不想要 的別名git
,因為desproxy
每次運行 git 命令時都會啟動 - 它應該只在git clone|fetch|push|etc
使用基於 SSH 的遠程存儲庫上運行時啟動。據我了解,這就是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 [email protected]:<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 [email protected]:<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 [email protected]:<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
我已經接受了@phd 的回答,因為它確實回答了這個問題,即使它沒有解決我的具體問題。我編寫了一個幫助腳本來使其正常工作,稍後我將發布該腳本。
語法錯誤:“;” 意外
錯誤來自shell。完全省略分號,&
它本身就是一個命令分隔符:
export GIT_SSH_COMMAND="set PROXY_USER=$proxy_user:$proxy_pw; desproxy ssh.github.com 443 $proxy_host $proxy_port 2222 & ssh"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句