无法通过 SSH 隧道克隆 git

Posted

技术标签:

【中文标题】无法通过 SSH 隧道克隆 git【英文标题】:Unable to clone git via SSH Tunnel 【发布时间】:2018-11-16 18:55:27 【问题描述】:

TLDR

我正在尝试从我的 linux 机器通过 ssh 隧道进入可以访问我的 *** 的 OSx 机器。这是我需要访问的 URL github.someprivateurl.net

详细的实际问题。

设置隧道

hutber@hutber ~ $ ssh -L 3333:github.someprivateurl.net:22 hutber@192.168.1.18
Password:
Last login: Thu Jun  7 01:00:34 2018 from 192.168.1.3
hutber@Jamies-Mac ~ $ 
hutber@Jamies-Mac ~/www/jamie $ git clone ssh://git@github.someprivateurl.net/Mortgages/mortgages.git
Cloning into 'mortgages-ui'...
remote: Counting objects: 63823, done.
remote: Compressing objects: 100% (52/52), done.
^Cfatal: The remote end hung up unexpectedlyMiB | 8.44 MiB/s  

^ 只是为了表明当 ssh 进入 OSx 时,我可以在这台机器中进行克隆。

进入隧道

hutber@hutber /var/www $ git clone ssh://git@github.someprivateurl.net:3333/Mortgages/mortgages-ui.git


Cloning into 'mortgages-ui'... 

我的 linux 机器上的上述克隆将挂起,直到连接意识到它无权访问并将我抛出。

我不确定这有多大帮助......但我无法访问我试图克隆的站点,所以它显然与 git 无关:

操作系统

hutber@Jamies-Mac ~/www/jamie $ ping github.someprivateurl.net
PING github.someprivateurl.net (10.113.188.195): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
^Z
[1]+  Stopped                 ping github.someprivateurl.net

Linux

hutber@hutber /var/www $ ping -p 3333 github.someprivateurl.net
PATTERN: 0x3333
PING github.someprivateurl.net (159.34.88.181) 56(84) bytes of data.
From 172.16.24.82 icmp_seq=1 Time to live exceeded
From 172.16.24.82 icmp_seq=2 Time to live exceeded
From 172.16.24.82 icmp_seq=3 Time to live exceeded
From 172.16.24.82 icmp_seq=4 Time to live exceeded
^C
--- github.someprivateurl.net ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3004ms

如何在我的 linux 机器上克隆 repo,同时通过 ssh 进入 OSx?

更新

因为这是我相信只是一个 SSH 错误。我应该提一下,SSH 实际上是通过主机到访客 SSH。我的客人有一个仅限主机的连接,并通过自己的物理 wifi 加密狗连接到互联网。它是设置 *** 的 wifi 连接。


hutber@hutber ~ $ ssh -fNT -L 3333:github.someprivateurl.net:22 hutber@192.168.1.18
Password:
hutber@hutber /var/www $ ssh -p 3333 github.someprivateurl.net
^C //Hangs
hutber@hutber /var/www $ telnet localhost 3333
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-libssh_0.7.0
^^
Connection closed by foreign host.

【问题讨论】:

与任何 git + ssh 错误一样,将其作为 ssh 问题进行调试是最简单的。首先,验证一下是否真的可以通过3333端口ssh到本机。pinging是不够的,其实是ssh -p 3333 <host> 谢谢@Schwern hutber@hutber /var/www $ ssh -p 3333 hutber@192.168.238.130 ssh: connect to host 192.168.238.130 port 3333: No route to host hutber@hutber /var/www $ ssh -p 3333 192.168.238.130 ssh: connect to host 192.168.238.130 port 3333: No route to hos 是的。正如我所怀疑的那样,隧道不起作用。将其作为 ssh 问题进行调试。 【参考方案1】:

$ ping -p 3333 github.someprivateurl.net

-p 并不表示要 ping 的端口。这意味着……别的东西。所以这不是检查端口 3333 是否打开,你只是在以一种奇怪的方式 ping 机器。

您的 git ssh URL 不正确。与其使用隧道连接的远程主机上的 3333 端口,不如告诉它使用本地主机的 3333 端口。

git clone ssh://git@localhost:3333/Mortgages/mortgages-ui.git

与大多数 git+ssh 问题一样,最容易将它们作为 ssh 问题进行调试。首先是实际尝试 sshing 到 3333 端口。

ssh -p 3333 localhost

我怀疑这行不通。从那里,正常调试 ssh 问题。

我怀疑您的隧道实际上并未运行,因为您的隧道在您退出它打开的 ssh 会话后立即关闭。您需要一些额外的标志才能使其作为隧道持续存在。具体...

-f 告诉ssh 立即进入后台 -N 阻止它尝试执行远程命令 -T 不分配伪终端来处理打字

那就是……

ssh -fNT -L 3333:github.someprivateurl.net:22 hutber@192.168.1.18

您还需要考虑使用autossh 来为您保持连接。

【讨论】:

感谢好友的帮助。 Cannot fork into background without a command to execute. @JamieHutber 你是否包括-N 竖起大拇指,我做的时候是小写的 N。我已经用更多格式化的信息更新了这个问题。看来,ssh -p... @JamieHutber 我还注意到您的 ssh URL 不正确。您需要 ssh 到 localhost 端口 3333。我的错误。 确实很有趣....hutber@hutber /var/www $ ssh -p 3333 localhost Permission denied (publickey). 所以现在我的 linux 机器正在尝试在没有我提供密钥的情况下连接到 OSx。我需要在我的 .ssh/config 中添加一个密钥?

以上是关于无法通过 SSH 隧道克隆 git的主要内容,如果未能解决你的问题,请参考以下文章

通过 SSH 创建 Git 存储库并将其克隆到本地

无法使用 JDBC 连接通过 SSH 隧道连接到 Azure DB

无法通过 python 中的 ssh 隧道连接到远程数据库

使用 SSH 隧道时无法通过套接字错误连接到本地 MySQL 服务器

无法使用 sqlcmd 通过 SSH 隧道访问 SQL 数据库

无法使用 SSH 从 BitBucket 克隆