ข้อผิดพลาด Git SSH:“ เชื่อมต่อกับโฮสต์: หมายเลขไฟล์ไม่ดี”


153

ฉันทำตามคำแนะนำ git แล้วแต่ฉันมีปัญหาแปลก ๆ นี้เมื่อพยายามเชื่อมต่อ gitub:

$ 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

TL; DR: ข้าม "หมายเลขไฟล์ไม่ดี" ข้อมูลที่คุณค้นหาไม่ได้อยู่ในข้อความนั้น มันอาจหมายถึงอะไร รายละเอียดเกี่ยวกับstackoverflow.com/a/22788046
Stéphane 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 จะเพิ่งหมดเวลา

ปัญหา:

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 ที่ "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 กว่าพอร์ต
Enrico Campidoglio

1
ที่ "วางรหัสต่อไปนี้:" ฉันไม่เข้าใจ ฉันควรจะแก้ไขหมายเลขไฟล์ที่ไม่ดีได้อย่างไร ฉันควรสร้างและบันทึกเป็นไฟล์แผ่นจดบันทึกหรือไม่
David Dimalanta

27
ฉันได้รับssh: connect to host ssh.github.com port 443: Bad file number
cqcn1991

สิ่งนี้ยังทำงานกับ bitbucket.org เมื่อการตั้งค่าการทำงานก่อนหน้าของฉันหยุดทำงานทันที ส่วนที่ดีที่สุดคือสิ่งเดียวที่ฉันต้องทำคือทำการเปลี่ยนแปลงไฟล์กำหนดค่า SSH
Kevin Condon

2
เมื่อใช้.ssh/configไฟล์บน windows 7 ตรวจสอบให้แน่ใจว่าคุณมี User-Enviromental Var ที่HOMEมี%USERPROFILE%ค่า -> ช่วยฉันเมื่อ ssh ของฉันไม่พบ
Jook

40

ข้อมูลสำคัญถูกเขียนในคำตอบของ @ Sam แต่ไม่เด่นนักดังนั้นให้ชัดเจน

"หมายเลขไฟล์ไม่ถูกต้อง" ไม่ได้ให้ข้อมูล แต่เป็นเพียงเครื่องหมายของการเรียกใช้ ssh ของ git บน Windows

บรรทัดที่ปรากฏแม้ไม่มี-vสวิตช์:

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

ไม่เกี่ยวข้องจริงๆ

หากคุณมุ่งเน้นไปที่มันคุณจะเสียเวลาเพราะมันไม่ใช่คำใบ้ว่าปัญหาที่แท้จริงคืออะไรเพียงผลของการเรียกใช้ ssh ของ git บน 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: เชื่อมต่อไปยังที่อยู่ 216.34.181.70 พอร์ต 22: การเชื่อมต่อถูกปฏิเสธ" ก่อน "หมายเลขไฟล์ไม่ถูกต้อง" ดังนั้นจึงไม่ใช่ข้อผิดพลาด "หมดเวลา" เสมอ
Qwertie

โอ้, Windows จะแสดงข้อความผิดพลาดคลุมเครือแม้เมื่อมีการใช้เครื่องมือแบบดั้งเดิมบน Linux และอื่น ๆ UNIX เหมือนระบบ ...
lilydjwg


5

บางทีไฟร์วอลล์หรือแอปพลิเคชันตัวบล็อก (PeerBlock เป็นต้น) กำลังบล็อกพอร์ตของคุณ


5

คุณสามารถลอง:

telnet example.com 22

เพื่อดูว่าคุณมีการเชื่อมต่อกับเซิร์ฟเวอร์หรือไม่ ฉันเห็นข้อความนี้และในที่สุดการเป็น VPN ที่ฉันใช้อยู่คือการบล็อกการเข้าถึง ตัดการเชื่อมต่อจาก VPN และฉันก็สบายดี


4

สิ่งที่ฉันพบคือสิ่งนี้เกิดขึ้นเมื่อการเชื่อมต่อของคุณไม่ดี ฉันมีไม่กี่นาทีที่ผ่านมาเมื่อผลักดันไปยัง repo ของฉันมันก็ล้มเหลวและหลังจากนั้นไม่นานการเชื่อมต่อก็ลดลง

หลังจากที่มันกลับขึ้นมาการผลักก็ผ่านไปทันที

ฉันเชื่อว่าอาจเกิดจากการเชื่อมต่อที่ลดลงจากด้านข้างหรือด้านข้างของคุณ


1
ฉันได้รับข้อผิดพลาดนี้เช่นกันเมื่อใช้ Verizon Jetpack ซึ่งดูเหมือนว่าจะขาดการเชื่อมต่อของฉันเมื่อฉันใช้ ssh จากอุปกรณ์แยกกันสองตัว ดังนั้นบางสิ่งใน Jetpack กำลังตัดการเชื่อมต่อและฉันได้รับbad file numberข้อผิดพลาดเมื่อการเชื่อมต่อดับลง
cod3monk3y

1
ฉันได้รับข้อผิดพลาดนี้เมื่อใช้การเชื่อมต่อฮอตสปอตของโทรศัพท์กับแล็ปท็อปของฉัน
Lucas Morgan

@LucasMorgan เหมือนกันที่นี่ นั่นคือสิ่งที่ฉันใช้เมื่อเกิดเหตุการณ์นี้ขึ้น
frostymarvelous

3

ถ้า SSH ถูกบล็อกมากกว่า 22

เพียงอัปเดตoriginเป็น https

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

ตรวจสอบว่ามีการเปลี่ยนแปลง

git remote -v


ถูกต้องอย่างไรก็ตามคุณจะต้องทำสิ่งนี้กับที่เก็บทุกอันด้วยวิธีนี้ ในไฟล์กำหนดค่าจะมีการใช้ทั่วโลก
Sam

2

ฉันเพิ่งมีปัญหาเดียวกันและลองวิธีแก้ปัญหาทุกอย่างที่ฉันสามารถหาได้ แต่ไม่มีใครทำงาน ในที่สุดฉันพยายามเลิก Git Bash และเปิดใหม่อีกครั้งและทุกอย่างทำงานได้อย่างสมบูรณ์

ดังนั้นลองเลิก Git Bash แล้วเปิดใหม่อีกครั้ง


2

ลองออกจากอินสแตนซ์ bash git ซึ่งคุณได้ทำการตั้งค่าแล้วลองเปิดใหม่อีกครั้ง ในที่สุดมันก็ใช้งานได้สำหรับฉัน


10
" ในที่สุดก็ทำงานให้ฉัน" ทำให้ฉันคิดว่าคุณอาจทำสิ่งอื่น ๆ ในกระบวนการที่อาจมีส่วนร่วม
Jake Berger

1

บน windows ฉันพยายามเลิก git bash และ re-run แต่ใช้งานไม่ได้ในที่สุดฉัน (frustated) ทำการรีสตาร์ทและมันทำงานในครั้งต่อไป :)


1

ตรวจสอบอีกครั้งว่าคุณได้เผยแพร่กุญแจสาธารณะของคุณผ่านทางอินเทอร์เฟซ GitHub Administration

จากนั้นตรวจสอบให้แน่ใจว่าพอร์ต 22 ไม่ถูกปิดกั้นอย่างใด (ดังที่แสดงในคำถามนี้ )


1
>> ตรวจสอบให้แน่ใจก่อนว่า 'git' เป็นชื่อบัญชีผู้ใช้ GitHub ของคุณ ตามที่อธิบายไว้ในคำแนะนำ git: ทดสอบทุกอย่าง เพื่อให้แน่ใจว่าทุกอย่างทำงานได้ตอนนี้คุณจะ SSH เพื่อ GitHub อย่าเปลี่ยนส่วน“ git@github.com” นั่นควรจะอยู่ที่นั่น >> จากนั้นตรวจสอบให้แน่ใจว่าพอร์ต 22 ไม่ถูกปิดกั้นอย่างใด -> ฉันปิดใช้งานไฟร์วอลล์ windows xp แต่ไม่มีอะไรเปลี่ยนแปลง
Massimo Ugues

1

ในกรณีของฉันที่อยู่ 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

วิธีแก้ปัญหาต่อไปนี้ทำงานสำหรับฉันเมื่อพยายามที่จะ SSH ไปยังอินสแตนซ์ AWS EC2 Ubuntu จากพีซี Windows 7 (32 บิต) ของฉันที่อยู่เบื้องหลังไฟร์วอลล์ขององค์กรที่ตั้งค่าพร็อกซี -

เพิ่มบล็อกต่อไปนี้ไปยังC:\Users\<YOUR_WINDOWS_USER>\.ssh\configfile-

> 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.