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 push - 似乎不是 git 存储库(ssh 指向错误的目录)