Git SSH error: "Соединиться с хостом: неверный номер файла"

Я следовал руководству по 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

Любая идея?

19 ответов

Решение

После этой проблемы я сам нашел для себя рабочее решение.

Сообщение об ошибке:

    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 :))

Обратите внимание, что мне не нужно указывать имя пользователя или номер порта.

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

"Плохой номер файла" не информативен, это всего лишь признак запуска 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 у вас есть более информативное сообщение, которое заслуживает своего собственного вопроса, затем откройте другой вопрос, после чего вы сможете сделать ссылку на него.

Это сработало для меня:

ssh -v git@github.com -p 443

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

telnet example.com 22

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

Может быть, ваш брандмауэр или блокирующее приложение (PeerBlock и т. Д.) Блокирует ваш порт

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

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

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

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

просто обнови свой origin в https

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

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

git remote -v

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

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

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

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

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

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

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

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

Проверьте ваш пульт с помощью git remote -v Что-то вроде ssh:///gituser@myhost:/git/dev.git

неправильно из-за тройной косой черты ///

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

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

Я видел эту проблему при доступе к 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".

Это простое решение для сохранения набора текста, вы можете легко использовать следующие шаги в 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

У меня была проблема, когда у меня было открытое FileZilla-Connection в Windows. Закрыто FileZilla -> Проблема решена.

В моем случае помогла просто перезагрузка WiFi роутера.

Другие вопросы по тегам