互联网上有成千上万个相同的解决方案,用于为git下载的this这样的代理定义代理隧道,所有这些都是通过设置git的function renderChart(data, labels) {
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'scatter',
data: {
labels: labels,
datasets: [{
label: '48 Hours Pressure History HPa',
data: data,
borderColor: 'rgba(75, 192, 192, 1)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
},
]
},
options: {
scales: {
xAxes: [{
ticks: {
callback: function(value) {
return new Date(value).getDate() +"-"+ new Date(value).getMonth() + "-"+new Date(value).getFullYear();
}
}
}]
}
}
});
}
和https.proxy
配置来实现的。但是当您尝试通过http.proxy
协议进行clone
/ push
/ pull
等操作时,这些答案不起作用!
例如,通过设置ssh
来尝试克隆git config --global https.proxy socks5://127.0.0.1:9999
时,它不会通过已定义的sock5隧道!
我尝试过各种方法,但是都没有用!
当它使用git clone git@github.org:user/repo.git
连接时,如何设置git使用本地socks5代理(例如127.0.0.1:9999
)?
答案 0 :(得分:3)
以前的答案可能有效,但我觉得它们过于复杂。
最常见的情况应该是通过 SOCKS5 代理访问公司 git 服务器。在这个例子中:
在这种情况下配置 git 的最简单方法是为 git 服务器 (~/.ssh/config) 设置一个很好的 SSH 配置:
Host git.evilcorp.com
# Identity file specifies wich SSH key used to access the git server.
Identityfile ~/.ssh/id_rsa
# ProxyCommand does the magic to access the proxy server.
ProxyCommand /bin/nc -X 5 -x 127.0.0.1:11080 %h %p
很酷的细节:DNS 解析由代理完成,因此您的机器不需要知道公司 DNS 服务器。
答案 1 :(得分:1)
您需要先定义GIT_SSH_COMMAND
environment variable
在其中,您可以重新定义ssh命令,以便使用袜子代理设置
ssh -D $port_number $hostname
# or
ssh -D $port_number $username@$hostname
或using a proxycommand nc(或ncat on Windows)
关键是:ssh与socks5代理一起使用后,您可以在GIT_SSH_COMMAND
中定义相同的语法,Git将使用正确的ssh
命令。
您还可以使用本地配置对其进行测试:
git -c core.sshCommand='ssh -D 9998 user@host.com' git pull
git -c core.sshCommand='ssh -D 9999 127.0.0.1' git pull
答案 2 :(得分:1)
访问了许多页面后,我终于找到了解决问题的方法:
# [step 1] create a ssh-proxy
ssh -D 9999 -qCN user@server.net
# [step 2] make git connect through the ssh-proxy
# [current script only]
export GIT_SSH_COMMAND='ssh -o ProxyCommand="connect -S 127.0.0.1:9999 %h %p"'
# OR [git global setting]
git config --global core.sshCommand 'ssh -o ProxyCommand="connect -S 127.0.0.1:9999 %h %p"'
# OR [one-time only use]
git clone -c=core.sshCommand 'ssh -o ProxyCommand="connect -S 127.0.0.1:9999 %h %p"' git@github.com:user/repo.git
# OR [current repository use only]
git config core.sshCommand 'ssh -o ProxyCommand="connect -S 127.0.0.1:9999 %h %p"'
要在Ubuntu上安装connect
,
sudo apt install connect-proxy
答案 3 :(得分:1)
git
自己的git --config 'http.proxy=socks5://127.0.0.1:4444'
或ssh_config
的{{1}}使用proxycommand
和socat
技术成功地重新路由了nc
命令通过SOCKS代理。
但是,问题可能是DNS查找失败,这是因为查找是在本地而不是通过SOCKS代理远程完成的。例如,对于Intranet,服务器在Internet上可能没有域名(仅Intranet DNS知道)。
有两种方法可以解决此问题。我见过的第一个建议多次,但是它提出了一个雄心勃勃的假设,即您控制远程服务器。
将本地53流量(DNS)重新路由到端口X,将其转发到端口Y的服务器,将端口Y转发到服务器上的53。为简单起见,通常X = Y。
拦截本地系统调用,以检索名称的IP地址。
我认为2.更好,因为它从源头上发现了问题,并且仅假设您控制本地计算机,这比控制远程服务器更有可能。
git
在访问本地nss之前先对其getaddrinfo系统调用进行感知。
步骤
打开SOCKS5端口
proxychains-ng
设置ssh -v -NT -D 127.0.0.1:4444 intranethost
以使用该端口。
proxychains
~/.proxychains/proxychains.conf
使用代理链封装git。
strict_chain
proxy_dns
tcp_read_time_out 150000
tcp_connect_time_out 80000
[ProxyList]
socks5 127.0.0.1 4444
走这条路的好处是,这对git及其远程控制都是透明的。
答案 4 :(得分:0)
克隆 git 有两种类型:HTTP 和 ssh。 有两种常见的代理类型:HTTP 和袜子。
这里是处理2 * 2条件的方法:
# Method 1. git http + proxy http
git config --global http.proxy "http://127.0.0.1:1080"
git config --global https.proxy "http://127.0.0.1:1080"
# Method 2. git http + proxy shocks
git config --global http.proxy "socks5://127.0.0.1:1080"
git config --global https.proxy "socks5://127.0.0.1:1080"
# to unset
git config --global --unset http.proxy
git config --global --unset https.proxy
# Method 3. git ssh + proxy http
vim ~/.ssh/config
Host github.com
HostName github.com
User git
ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=1087
# Method 4. git ssh + proxy socks
vim ~/.ssh/config
Host github.com
HostName github.com
User git
ProxyCommand nc -v -x 127.0.0.1:1080 %h %p