Помилка 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
Стефан Горічон

Відповіді:


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. Користувачі Linux просто вийдуть з Timed.

Проблема:

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

Як ви бачите, стан фільтрується, це означає, що щось блокує його. Ви можете вирішити це, виконавши SSH до порту 443 (ваш брандмауер / isp не заблокує це). Також важливо, що вам потрібно перейти на "ssh.github.com" замість github.com. В іншому випадку ви будете звітувати перед веб-сервером замість ssh-сервера. Нижче наведено всі кроки, необхідні для вирішення цієї проблеми.

Рішення:

(Перш за все переконайтеся, що ви створили свої ключі, як пояснено далі http://help.github.com/win-set-up-git/ )

створити файл ~ / .ssh / config (файл ssh config, розташований у вашому користувальницькому каталозі. Напевно у 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%значенням -> допоміг мені, коли мій 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-адреси, але ваша може бути різною.

Це питання про "неправильний номер файлу" чи про безліч причин, через які з’єднання може вичерпатися?

Якщо хтось може довести, що "неправильний номер файлу" з'являється лише тоді, коли справжньою причиною є "час вимкнення з'єднання", то має сенс вирішити питання про те, чому з'єднання може вичерпатися.

До цього часу "неправильний номер файлу" є лише загальним повідомленням про помилку, і на це запитання в повному обсязі відповідає: "ігноруйте його та шукайте інші повідомлення про помилки".

EDIT: Qwertie згадав, що повідомлення про помилку дійсно є загальним, оскільки це може статися і на "З'єднання відмовлено". Це підтверджує аналіз.

Будь ласка, не захаращуйте це питання загальними підказками та відповідями, вони не мають нічого спільного з актуальною темою (та назвою) цього питання, що є "Помилка Git SSH:" Підключення до хоста: Неправильний номер файлу "". Якщо -vви користуєтеся більш інформативним повідомленням, яке заслуговує на власне запитання, відкрийте ще одне запитання, тоді ви можете зробити посилання на нього.


1
Так, додавши -v до мого scpкомандного рядка додано "debug1: підключення до адреси 216.34.181.70 порт 22: з'єднання відхилено" перед "неправильним номером файлу", тому це не завжди помилка "вичерпана".
Qwertie

О, Windows завжди показує невиразні повідомлення про помилки, навіть коли цей інструмент традиційно використовується в Linux та інших системах, схожих на UNIX ...
lilydjwg



5

Ви також можете спробувати:

telnet example.com 22

щоб побачити, чи є у вас підключення до сервера. Я побачив це повідомлення, і воно виявилося тим, що VPN, на якому я був, блокував доступ. Відключився від VPN, і мені було добре піти.


4

Я знайшов, що це відбувається, коли ваш зв’язок поганий. У мене це було кілька хвилин тому, коли натискання на мою репо було невдало, і через деякий час зв’язок знизився.

Після того, як він повернувся вгору, поштовх негайно перейшов.

Я вважаю, що це може бути викликано або падінням зв’язку з вашого боку чи з їхнього боку.


1
Я також отримую цю помилку під час використання Verizon Jetpack, який, здається, перериває моє з'єднання, коли я використовую ssh з двох окремих пристроїв. Тож щось у Jetpack перериває з'єднання, і я отримую bad file numberпомилку, коли з'єднання падає.
cod3monk3y

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

@LucasMorgan те саме тут. Саме цим я і користувався, коли це сталося.
frostymarvelous

3

Якщо SSH заблокований понад 22

просто оновіть свій originhttps

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 і перезапустити, але нічого не вийшло, нарешті я (роздратований) зробив перезапуск, і це спрацювало наступного разу :)


1

Переконайтесь, що ви опублікували свої відкриті ключі через інтерфейс адміністрації GitHub.

Тоді переконайтесь, що порт 22 якимось чином не заблокований (як показано в цьому запитанні )


1
>> Спочатку переконайтесь, що 'git' - ваше ім’я облікового запису користувача GitHub. Як описано в посібнику з git: Перевірте все. Щоб переконатися, що все працює, тепер ви будете SSH на GitHub. Не змінюйте частину "git@github.com". Це, мабуть, там. >> Потім переконайтеся, що порт 22 якось не заблокований -> Я відключив брандмауер Windows xp, але нічого не змінилося.
Массімо Угус

1

У моєму випадку IP-адресу нашого git-хоста було змінено.

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


0

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


0

Перевірте свій пульт за допомогою git remote -v Щось на зразок ssh: /// gituser @ myhost: /git/dev.git

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


0

Цю проблему я бачив, коли отримую доступ до бітбукета у корпоративній мережі, в той час як 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 біт) за корпоративним брандмауером, налаштовуючи Proxy-

Додайте наступний блок у 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-підключення у 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.