Git SSH 错误:“连接到主机:错误的文件号”

Posted

技术标签:

【中文标题】Git SSH 错误:“连接到主机:错误的文件号”【英文标题】:Git SSH error: "Connect to host: Bad file number" 【发布时间】:2011-10-31 23:15:44 【问题描述】:

我关注了git guide,但在尝试连接到 github 时遇到了这个奇怪的问题:

$ ssh -v git@github.com
OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
debug1: Reading configuration data /c/Documents and Settings/mugues/.ssh/config
debug1: Applying options for github.com
debug1: Connecting to github.com [207.97.227.239] port 22.
debug1: connect to address 207.97.227.239 port 22: Attempt to connect timed out without establishing a connection
ssh: connect to host github.com port 22: Bad file number

这是我在 .ssh 下的配置文件

Host github.com
    User git
    Hostname github.com
    PreferredAuthentications publickey
    IdentityFile "C:\Documents and Settings\mugues\.ssh\id_rsa"
    TCPKeepAlive yes
    IdentitiesOnly yes

有什么想法吗?

【问题讨论】:

今天收到了。而且看起来 Github 已经挂了。 TL;DR:忽略“错误文件号”。您要查找的信息不在该消息中。这可能意味着任何事情。详情***.com/a/22788046 【参考方案1】:

在自己遇到这个问题后,我找到了一个适合我的解决方案:

错误信息:

    ssh -v git@github.com
    OpenSSH_5.8p1, OpenSSL 1.0.0d 8 Feb 2011
    debug1: Connecting to github.com [207.97.227.239] port 22.
    debug1: connect to address 207.97.227.239 port 22: Connection timed out
    ssh: connect to host github.com port 22: Connection timed out
    ssh: connect to host github.com port 22: Bad file number

您只会在使用 MINGGW shell 的 Windows 上看到错误文件编号消息。 Linux 用户只会超时。

问题:

SSH 可能在端口 22 上被阻止。您可以通过键入来查看

    $nmap -sS github.com -p 22
    Starting Nmap 5.35DC1 ( http://nmap.org ) at 2011-11-05 10:53 CET
    Nmap scan report for github.com (207.97.227.239)
    Host is up (0.10s latency).
    PORT   STATE    SERVICE
    22/tcp ***filtered*** ssh

    Nmap done: 1 IP address (1 host up) scanned in 2.63 seconds

如您所见,状态为“已过滤”,这意味着有东西在阻止它。 您可以通过对端口 443 执行 SSH 来解决此问题(您的防火墙/isp 不会阻止此问题)。 同样重要的是,您需要 ssh 到“ssh.github.com”而不是 github.com。 否则,您将向 web 服务器而不是 ssh 服务器报告。 以下是解决此问题所需的所有步骤。

解决方案:

(首先确保您按照http://help.github.com/win-set-up-git/ 中的说明生成了密钥)

创建文件 ~/.ssh/config(位于您的用户目录中的 ssh 配置文件。 在 Windows 上可能是 %USERPROFILE%\.ssh\config

在其中粘贴以下代码:

    Host github.com
    User git
    Hostname ssh.github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa
    Port 443

保存文件。

像往常一样执行 ssh:

$ssh -T github.com 
    $Enter passphrase for key '.......... (you can smile now :))

请注意,我不必提供用户名或端口号。

【讨论】:

换句话说,你建立SSH connections over the HTTPS port。 在“粘贴以下代码:”,我不明白。我该如何解决错误的文件号?我应该创建它并保存为记事本文件吗? 我得到的是ssh: connect to host ssh.github.com port 443: Bad file number 这也适用于 bitbucket.org,当时我之前的工作设置突然停止工作。最好的部分是我唯一要做的就是更改 SSH 配置文件。 在 Windows 7 上使用 .ssh/config 文件时,请确保您有一个用户环境变量 HOME%USERPROFILE% 作为值 -> 帮助我,当我的 ssh 找不到它时 【参考方案2】:

关键信息写在@Sam 的答案中,但不是很突出,所以让我们说清楚。

"Bad file number" 不提供信息,它只是在 Windows 上运行 git 的 ssh 的标志。

即使没有-v 开关也会出现的行:

ssh: connect to host (some host or IP address) port 22: Bad file number

实际上无关

如果你专注于它,你会浪费你的时间,因为它不是关于实际问题的暗示,只是在 Windows 上运行 git 的 ssh 的效果。这甚至不是 git 或 ssh 安装或配置错误的迹象。真的,忽略它

Linux 上的相同命令为我生成了这条消息,它给出了有关问题的实际提示:

ssh: connect to host (some host or IP address) port 22: Connection timed out

实际解决方案:忽略“坏文件号”并获取更多信息

关注在命令行上使用-v 添加的行。在我的情况下是:

debug1: connect to address (some host or IP address) port 22: Attempt to connect timed out without establishing a connection

我的问题是 IP 地址打错了,但你的可能不一样。

这个问题是关于“错误的文件号”,还是关于连接超时的多种原因?

如果有人可以证明“错误文件号”仅在实际原因是“连接超时”时出现,那么解决连接超时的原因是有意义的。

在那之前,“错误的文件号”只是一个通用的错误消息,通过说“忽略它并查找其他错误消息”可以完全回答这个问题。

编辑:Qwertie 提到错误消息确实是通用的,因为它也可能发生在“连接被拒绝”上。这证实了分析。

请不要用一般提示和答案来混淆这个问题,它们与这个问题的实际主题(和标题)无关,即“Git SSH 错误:“连接到主机:错误文件号””。如果使用-v,你有更多信息值得他们自己提问,然后打开另一个问题,然后你可以链接到它。

【讨论】:

是的,在我的scp 命令行中添加 -v 在“错误文件号”之前添加了“debug1:连接到地址 216.34.181.70 端口 22:连接被拒绝”,因此它并不总是“定时”出”错误。 哦,Windows 总是显示模糊的错误消息,即使该工具传统上用于 Linux 和其他类 UNIX 系统...【参考方案3】:

这对我有用:

ssh -v git@github.com -p 443

【讨论】:

【参考方案4】:

也许您的防火墙或阻止程序(PeerBlock 等)正在阻止您的端口

【讨论】:

【参考方案5】:

您也可以尝试:

telnet example.com 22

查看您是否已连接到服务器。我看到了这条消息,它最终是我所在的 *** 阻止了访问。与 *** 断开连接,我很高兴。

【讨论】:

【参考方案6】:

我发现,当您的连接不佳时,就会发生这种情况。 几分钟前,当我推送到我的仓库时,它一直在失败,然后过了一会儿,连接断开了。

回升后,立即推送。

我认为这可能是由于您一方或他们一方的连接中断造成的。

【讨论】:

我在使用我的 Verizon Jetpack 时也遇到了这个错误,当我从两个单独的设备上使用 ssh 时,它似乎断开了我的连接。所以 Jetpack 中的某些东西正在断开连接,当连接断开时我收到 bad file number 错误。 在笔记本电脑上使用手机的热点连接时出现此错误。【参考方案7】:

如果 SSH 超过 22 年被阻止

只需将您的 origin 更新为 https

git remote set-url origin https://github.com/ACCOUNT_NAME/REPO_NAME.git

验证是否进行了更改

git remote -v

【讨论】:

正确,但是您必须使用此方法对每个存储库执行此操作。在配置文件中,它被全局应用。【参考方案8】:

尝试退出您进行设置的 git bash 实例并尝试重新打开。它最终对我有用。

【讨论】:

最终为我工作”让我觉得您在此过程中可能一直在做其他可能有所贡献的事情。【参考方案9】:

我只是遇到了同样的问题,并尝试了我能找到的所有解决方案,但都没有奏效。最后,我尝试退出 Git Bash 并重新打开它,一切正常。

所以,请尝试退出 Git Bash 并重新打开它。

【讨论】:

【参考方案10】:

在 Windows 上,我尝试退出 git bash 并重新运行,但没有成功,最后我(沮丧)重新启动,下一次成功了 :)

【讨论】:

【参考方案11】:

仔细检查您是否已通过 GitHub 管理界面发布了您的公钥。

然后确保端口 22 没有被阻塞(如illustrated in this question)

【讨论】:

>>首先确保 'git' 是你的 GitHub 用户帐户名。如 git 指南中所述:测试一切。为确保一切正常,您现在将通过 SSH 连接到 GitHub。不要更改“git@github.com”部分。那应该在那里。 >>然后确保端口 22 没有被阻止 --> 我禁用了 windows xp 防火墙,但没有任何改变。【参考方案12】:

在我的例子中,我们的 git 主机的 IP 地址发生了变化。

只需刷新 DNS 缓存即可解决问题。

【讨论】:

【参考方案13】:

创建配置文件以使用端口 443 对我不起作用。最后我试图关闭我的wifi连接,再次打开它,问题就消失了。诡异的。愚蠢的解决方案,但它可能会帮助某人:)

【讨论】:

【参考方案14】:

用 git remote -v 检查你的遥控器 就像是 ssh:///gituser@myhost:/git/dev.git

因为三重///斜线而出错

【讨论】:

【参考方案15】:

我在公司网络中访问bitbucket时看到了这个问题,而git在家庭网络中可以正常工作。

$ git pull
ssh: connect to host bitbucket.org port 22: Bad file number
fatal: Could not read from remote repository.

我使用 https 协议来解决这个问题。

$ git pull https://myaccount@bitbucket.org/myaccount/myrepo.git
Password for 'https://myaccount@bitbucket.org':

请用相应的词代替“myaccount”和“myrepo”。

【讨论】:

【参考方案16】:

以下解决方案在我尝试从公司防火墙设置代理后的 Windows 7(32 位)PC SSH 到 AWS EC2 Ubuntu 实例时对我有用-

将以下块添加到C:\Users\<YOUR_WINDOWS_USER>\.ssh\config文件-

> Host *
>      ProxyCommand "C:/Program Files/Git/mingw32/bin/connect.exe" -H <YOUR_PROXY_SERVER_HOST>:<YOUR_PROXY_SERVER_PORT> %h %p
>      IdentityFile "<PATH_OF_YOUR_IDENTITY_FILE>"
>      TCPKeepAlive yes
>      IdentitiesOnly yes
>     
>     Host <SERVER_HOST_NAME_OR_IP_YOU_WANT_TO_SSH_INTO>
>      Port <SERVER_HOST_PORT_YOU_WANT_TO_SSH_INTO>
>      Hostname <SERVER_HOST_NAME_OR_IP_YOU_WANT_TO_SSH_INTO>

您需要为每个要通过 SSH 连接的主机添加类似的配置。

【讨论】:

【参考方案17】:

我在 Windows 上打开 FileZilla-Connection 时遇到了问题。 关闭 FileZilla -> 问题解决了。

【讨论】:

【参考方案18】:

这是简单的解决方案 为了节省一些输入,您可以轻松地在 git bash 中使用以下步骤..

(1) 创建远程仓库

git remote add origin https://your_username:your_password@github.com/your_username/repo.git

注意:如果您的密码包含“@”符号,请使用“%40”代替

(2) 然后对远程存储库做任何你想做的事情

ex:- git push origin master

【讨论】:

【参考方案19】:

在我的情况下,只需重新启动 WiFi 路由器即可。

【讨论】:

以上是关于Git SSH 错误:“连接到主机:错误的文件号”的主要内容,如果未能解决你的问题,请参考以下文章

使用GIT_SSH错误使用自定义SSH进行Git克隆

由于 SSH 错误,Git 无法推送 puttycyg

Git push - 似乎不是 git 存储库(ssh 指向错误的目录)

git push上的SSH“没有这样的文件或目录”错误

Git推送错误:ssh:无法解析主机名domain.com [:7555]:提供节点名或服务名,或未知

如何在 Windows 上的 git 配置中修复“ssh 权限被拒绝,请重试错误”