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


153

我遵循了git指南,但是在尝试连接到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似乎失败了。
ysrb 2014年

TL; DR:忽略“错误的文件号”。您要查找的信息不在该消息中。这可能意味着什么。在详细stackoverflow.com/a/22788046
斯特凡纳·古里科

Answers:


186

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

错误信息:

    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而不是github.com来使用“ ssh.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 :))

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


4
换句话说,您可以通过HTTPS端口建立SSH连接
恩里科·坎皮多里奥

1
在“将以下代码粘贴到其中:”中,我听不懂。我应该如何解决错误的文件号?我应该创建它并保存为记事本文件吗?
大卫·迪玛兰塔

27
我反而得到ssh: connect to host ssh.github.com port 443: Bad file number
cqcn1991

当我以前的安装程序突然停止工作时,这对于bitbucket.org也起作用。最好的部分是,我唯一要做的就是更改SSH配置文件。
凯文·康登

2
.ssh/config在Windows 7上使用文件时,请确保您有一个User-Enviromental Var HOME%USERPROFILE%其值->当我的ssh找不到它时->帮助了我
Jook

40

关键信息写在@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错误:“连接到主机:错误的文件号””。如果使用时-v您有更多有价值的消息值得提出自己的问题,请打开另一个问题,然后可以链接到该问题。


1
是的,在我的scp命令行中添加-v 在“错误的文件号”之前添加了“ debug1:连接到地址216.34.181.70端口22:连接被拒绝”,因此它并不总是“超时”错误。
Qwertie 2014年

哦,即使在Linux和其他类似UNIX的系统上传统使用该工具的情况下,Windows也总是显示模糊的错误消息……
lilydjwg



5

您也可以尝试:

telnet example.com 22

查看您是否与服务器建立连接。我看到了此消息,最终导致我所在的VPN阻止了访问。断开与VPN的连接,我很好。


4

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

恢复后,立即进行了推送。

我相信,这可能是由于您或他们双方之间的连接减少所致。


1
使用Verizon Jetpack时也会出现此错误,当我从两个单独的设备使用ssh时,似乎断开了连接。因此,Jetpack中的某些内容正在断开连接,bad file number当连接断开时,我会收到错误消息。
cod3monk3y 2013年

1
在笔记本电脑上使用手机的热点连接时出现此错误。
卢卡斯·摩根

@LucasMorgan在这里也一样。这就是发生这种情况时我所使用的。
frostymarvelous

3

如果SSH被阻止超过22

只需将您更新origin为https

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

确认已进行更改

git remote -v


正确,但是您必须使用此方法对每个存储库执行此操作。在配置文件中,它是全局应用的。
2015年

2

我只是遇到了同样的问题,并尝试了所有可以找到的解决方案,但是没有一个可行。最终,我尝试退出Git Bash并重新打开它,一切正常。

因此,请尝试退出Git Bash并重新打开它。


2

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


10
最终为我工作”使我认为您在此过程中可能还在做其他可能有所贡献的事情。
杰克·伯杰

1

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


1

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

然后确保端口22没有以某种方式被阻塞(如该问题所示


1
>>首先确保'git'是您的GitHub用户帐户名。如git指南中所述:测试所有内容。为了确保一切正常,您现在将SSH到GitHub。不要更改“ git@github.com”部分。那应该在那里。>>然后确保端口22没有以某种方式被阻止->我禁用了Windows XP防火墙,但未进行任何更改。
马西莫·乌格斯

1

就我而言,我们的git主机的IP地址已更改。

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


0

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


0

使用git remote -v检查您的遥控器,例如ssh:/// gituser @ myhost:/git/dev.git

是错误的,因为有三斜杠///


0

当我在公司网络中访问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”。


0

当尝试从公司防火墙后面的代理服务器设置为从我的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进入的每个主机添加类似的配置。


-1

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


-1

这是保存某些类型的简单解决方案,您可以在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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.