【发布时间】:2020-08-29 04:09:51
【问题描述】:
我目前正在尝试从 Gitlabs 克隆一个 repo 到我的谷歌虚拟机。 我通过 SSH 连接到我的虚拟机,然后尝试通过 SSH 克隆 Gitlab 存储库。 我收到以下错误:
git clone git@domain:name/project.git
Cloning into 'project'...
ssh: connect to host domain port 22: Connection timed out
fatal: Could not read from remote repository.
我已将我的公共 ssh 密钥复制到 gitlabs.com/profile/keys。我不确定在不识别凭据时是否会产生连接超时。但是,凭据是正确的。
我最初的想法是 vm 使用端口 22 来克隆,我也使用 22 来 ssh 进入 vm,所以可能该端口正在使用而不是监听。我认为通过在 vm 上运行以下命令产生的这些结果表明:
sudo lsof -i:22 ## see a specific port such as 22 ##
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 482 root 3u IPv4 13498 0t0 TCP *:ssh (LISTEN)
sshd 482 root 4u IPv6 13509 0t0 TCP *:ssh (LISTEN)
sshd 15101 root 3u IPv4 88752 0t0 TCP vm-csc362.c.databasesystems-287719.internal:ssh->externalip:20470 (ESTABLISHED)
sshd 15119 ming 3u IPv4 88752 0t0 TCP vm-csc362.c.databasesystems-287719.internal:ssh->externalip:20470 (ESTABLISHED)
这描述了 ESTABLISHED。
https://stackoverflow.com/questions/988424/lsof-connection-established#:~:text=lsof%20%2Di%20only%20shows%20you,or%20still%20attempting%20to%20authenticate.&text=The%20'ESTABLISHED'%20means%20the%20TCP,sees%20any%20data%20at%20all。
lsof -i 只显示活动的 tcp 连接。因此它不会告诉您是否已登录或仍在尝试进行身份验证。 ESTABLISHED 表示 TCP 连接已建立,即握手已在 TCP/IP 级别执行。在 ssh 进程看到任何数据之前,这是必需的。
我最终将端口更改为 2222(尽管在端口 2222 上运行上述命令并重新启动服务并更新防火墙以允许该端口时,它似乎没有检测到这一点),所以我将它们改回来。 根据这些结果,ssh 也在监听端口 22。我认为我之前认为端口被阻塞的想法是错误的。
有没有人知道发生了什么?
我读到这篇文章讨论了可能发生的事情:https://unix.stackexchange.com/questions/229431/why-are-all-my-ssh-attempts-failing-due-to-timeout。 您正在该机器上运行 SSH 服务器,它确实使用了您尝试连接的端口,但该机器有防火墙,不允许您连接到它。您需要弄清楚如何更改防火墙,或者您可能需要从不同的主机 ssh 才能被允许进入。
关于防火墙,我尝试了这些以允许端口:
sudo ufw allow 2222/tcp
sudo ufw allow 22/tcp
我很确定 22 已经被允许,但我不是专家,所以我做到了。
我没有成功。
【问题讨论】:
-
ssh -t git@domain说什么?您还可以添加最多 3 个-v,以获取有关 SSH 级别 (ssh -t -vvv git@domain) 的更多信息。