Kri*_*tin 6 linux ssh git tunnel
我可以通过 ssh 访问服务器 A,从服务器 A 可以访问服务器 B,它运行 gitlabs 并包含我需要访问的存储库。当我通过 ssh 进入服务器 A 时,我可以git clone http://serverB/path/to/repo.git成功运行。使用ssh://或git://代替http://不起作用。(错误分别是“似乎不是 git 存储库”和“无法连接到 serverB”。)
如果我设置这样的隧道:
ssh username@serverA -L 3333:serverB:80 -N
Run Code Online (Sandbox Code Playgroud)
以下两次 git 克隆尝试失败:
git clone http://localhost:3333/path/to/repo.git
Run Code Online (Sandbox Code Playgroud)
失败:“致命:未找到存储库”
git clone localhost:3333/path/to/repo.git
Run Code Online (Sandbox Code Playgroud)
提示我输入 serverB 的密码,然后失败并显示“致命:3333/path/to/repo.git 似乎不是 git 存储库”。当然不是!我试图指定 localhost,端口 3333,显然被解释为 serverB 上的相对路径。
有没有办法来解决这个问题?这种方法有什么根本问题吗?
use*_*686 10
http://localhost:3333/path/to/repo.git
Run Code Online (Sandbox Code Playgroud)
这会失败,因为 URL 的主机名不同 ( localhostvs server2),因此服务器使用不同的配置。
所有 HTTP 客户端都将请求的主机名发送到服务器,服务器可以根据该名称从多个配置(虚拟主机)中进行选择。这是多少个网站(通常是数百个)可以在托管服务提供商处共享相同的 IP 地址。
localhost:3333/path/to/repo.git
Run Code Online (Sandbox Code Playgroud)
这将失败,因为它不是HTTP URL,或者实际上根本不是任何 URL。(Git 不是 Web 浏览器,http://默认情况下不会假设。)
相反,它是形式为 的 rcp 样式的 SSH 地址[user@]host:path。您可能早先看到它是git@github.com:foo/bar.git,其中ssh@前缀实际上只是一个 SSH 用户名。
Git 将其视为等同于ssh://[user@]host[:port]/pathURL,只是 rcp 样式的地址根本没有端口字段。
Git 使用的 HTTP 客户端 curl 支持ssh -D动态隧道提供的 SOCKS 代理。
使用以下命令设置动态 (SOCKS) 隧道:
ssh username@serverA -D 1080 -N
Run Code Online (Sandbox Code Playgroud)配置 Git 以将其用作代理:
全局(或每个存储库):
git config [--global] http.proxy socks5://localhost:1080
Run Code Online (Sandbox Code Playgroud)
对于单个命令:
git -c http.proxy=socks5://localhost:1080 clone http://serverB/repo.git
Run Code Online (Sandbox Code Playgroud)在socks5和socks4客户端上的协议进行DNS解析,而socks5h并socks4a通过SOCKS通过所有主机名到SSH服务器。
| 归档时间: |
|
| 查看次数: |
9310 次 |
| 最近记录: |