Ошибка 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

Любая идея?


Получил это сегодня. И кажется, что Гитхуб упал.
ysrb

TL; DR: игнорировать "неверный номер файла". Информация, которую вы ищете, отсутствует в этом сообщении. Это может означать что угодно. Подробная информация о stackoverflow.com/a/22788046
Стефан Gourichon

Ответы:


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

Вы увидите сообщение о неверном номере файла только в Windows, используя оболочку MINGGW. Пользователи 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. В противном случае вы будете отправлять отчеты на веб-сервер, а не на сервер 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
Другими словами, вы устанавливаете соединения SSH через порт HTTPS .
Энрико Кампидоглио

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%значением as -> помог мне, когда мой ssh ​​не смог его найти
Jook

40

Ключевая информация написана в ответе @ Сэма, но не очень заметна, поэтому давайте проясним это.

«Плохой номер файла» не информативен, это всего лишь признак запуска git ssh в Windows.

Строка, которая появляется даже без -vпереключателя:

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

на самом деле не имеет значения .

Если вы сосредоточитесь на этом, вы потратите время впустую, так как это не подсказка о том, что является реальной проблемой, а просто эффект запуска git ssh в Windows. Это даже не признак неправильной установки или конфигурации 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
Да, добавление -v в мою scpкомандную строку добавило «debug1: connect по адресу 216.34.181.70 порт 22: Соединение отклонено» до «Плохой номер файла», так что это не всегда ошибка «тайм-аут».
Qwertie

О, Windows всегда показывает расплывчатые сообщения об ошибках, даже когда инструмент традиционно используется в Linux и других UNIX-подобных системах ...
lilydjwg



5

Вы также можете попробовать:

telnet example.com 22

чтобы увидеть, если у вас есть подключение к серверу. Я увидел это сообщение, и в итоге VPN, на которой я был, блокировал доступ. Отключил от ВПН и мне было хорошо идти.


4

Я обнаружил, что это происходит, когда ваше соединение плохое. У меня было это несколько минут назад, когда я нажимал на репо, оно продолжало давать сбой, и через некоторое время связь оборвалась.

После того, как это вернулось, толчок немедленно прошел.

Я полагаю, что это может быть вызвано либо обрывом связи с вашей или их стороны.


1
Я также получаю эту ошибку при использовании моего Verizon Jetpack, который, по-видимому, разрывает мое соединение, когда я использую ssh с двух разных устройств. Так что-то в Jetpack разрывает соединение, и я получаю сообщение об bad file numberошибке, когда соединение обрывается.
cod3monk3y

1
Я получаю эту ошибку при использовании подключения к точке доступа моего телефона с моим ноутбуком.
Лукас Морган

@LucasMorgan то же самое здесь. Это было то, что я использовал, когда это случилось.
морозный,

3

Если SSH заблокирован более 22

просто обновите ваш originдо https

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

убедитесь, что были внесены изменения

git remote -v


правильно, однако вы должны будете сделать это для каждого хранилища с помощью этого метода. В конфигурационном файле он применяется глобально.
Сэм

2

У меня была та же проблема, и я пытался найти любое решение, которое смог найти, но ни одно не помогло. В конце концов я попытался выйти из Git Bash и снова открыть его, и все работало отлично.

Итак, попробуйте выйти из Git Bash и снова открыть его.


2

Попробуйте выйти из экземпляра git bash, через который вы выполнили настройку, и попробуйте снова открыть. В конечном итоге это сработало для меня.


10
«в конечном итоге сработало для меня» заставляет меня думать, что вы, возможно, делали другие вещи в процессе, которые могли бы внести свой вклад.
Джейк Бергер

1

В Windows я попытался выйти из git bash и перезапустить, но ничего не получилось, в конце концов я (frustated) перезапустился, и это сработало в следующий раз :)


1

Дважды проверьте, что вы опубликовали свои открытые ключи через интерфейс администрирования GitHub.

Затем убедитесь, что порт 22 как-то не заблокирован (как показано в этом вопросе )


1
>> Сначала убедитесь, что «git» - это имя вашей учетной записи пользователя GitHub. Как описано в руководстве git: Протестируйте все. Чтобы убедиться, что все работает, теперь вы подключитесь к GitHub. Не меняйте часть «git@github.com». Это должно быть там. >> Затем убедитесь, что порт 22 как-то не заблокирован -> Я отключил брандмауэр Windows XP, но ничего не изменилось.
Массимо выступает

1

В моем случае IP-адрес нашего хоста git изменился.

Простая очистка кеша DNS устранила проблему.


0

Создание файла конфигурации для использования порта 443 не работает для меня. Наконец я попытался отключить соединение Wi-Fi, включить его снова, и проблема исчезла. Weird. Глупое решение, но оно может кому-то помочь :)


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

Следующее решение работало для меня, когда я пытался подключиться к 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.


-1

У меня была проблема, когда у меня было открытое FileZilla-Connection в Windows. Закрыто 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.