Git SSH 错误: “ Connect to host: Bad file number”

我关注的是 饭桶指南,但在尝试连接到 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

知道吗?

182131 次浏览

再次检查您是否已经通过 GitHub 管理界面发布了公钥。

然后确保端口22没有被阻塞(如 在这个问题中加以说明)

我发现,这种情况发生在信号不好的时候。 几分钟前我在推回收的时候出现了问题,一直失效,过了一会儿,连接中断了。

在它恢复之后,推力马上就发挥作用了。

我相信这可能是由于你方或他方的联系下降造成的。

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

错误消息:

    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 时才会看到错误的文件编号消息。Linux 用户只会得到 Timed out。

问题:

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

正如您所看到的,状态是 Filtered,这意味着有东西阻塞了它。 您可以通过将 SSH 执行到端口443来解决这个问题(您的防火墙/isp 不会阻止这一点)。 同样重要的是,你需要 ssh 到“ ssh.github.com”而不是 github.com。 否则,您将向 webserver 报告,而不是向 ssh 服务器报告。 下面是解决这个问题所需的所有步骤。

解决方案:

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

Create file ~/. ssh/config (ssh 配置文件位于用户目录中。 可能在 %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 :))

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

我只是遇到了同样的问题,尝试了所有我能找到的解决办法,但没有一个奏效。最后,我试着退出 Git Bash,重新打开它,一切都很完美。

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

当我在 Windows 上有一个打开的 FileZilla-Connection 时,我遇到了这个问题。 闭合文件 Zilla-> 问题解决。

尝试退出通过其进行安装的 gitbash 实例,并尝试重新打开。最后我成功了。

这对我很有效:

ssh -v git@github.com -p 443

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

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

创建使用端口443的配置文件对我来说不起作用。最后我试着关掉我的 wifi 连接,再次打开它,问题就消失了。真奇怪。愚蠢的解决方案,但它可能有助于某人:)

你亦可尝试:

telnet example.com 22

查看是否与服务器有连接。我看到了这条信息,结果是我所在的 VPN 屏蔽了访问。从虚拟专用网断开,我就可以走了。

用 git remote-v 检查你的遥控器 差不多 Ssh:///gituser@myhost:/git/dev.git

是错误的,因为使用了三重///斜杠

在我的情况下,只需重新启动 WiFi 路由器就会有所帮助。

这是最简单的解决办法 为了保存一些类型,您可以轻松地在 gitbash 中使用以下步骤。

(1)创建远程存储库

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

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

(2)然后对远程存储库进行任何操作

ex:- git push origin master

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

“糟糕的文件编号”并不能提供信息,它只是在 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 error: “ Connect to host: Bad file number”。如果使用 -v你有更多的信息,值得自己的问题,然后打开另一个问题,然后你可以做一个链接到它。

如果 SSH 在22上被阻塞

只需更新你的 origin到 https

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

验证已经进行了更改

git remote -v

在我的情况下,我们的 git 主机的 IP 地址已经更改。

只需刷新 DNS 缓存就解决了这个问题。

我在企业网络中访问 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”。

下面的解决方案为我工作时,试图 SSH 到 AWS EC2 Ubuntu 实例从我的 Windows 7(32位)个人电脑后面的公司防火墙设置代理-

将以下代码块添加到 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 到的类似配置。