Lỗi Git SSH: Kết nối với máy chủ: Số tệp xấu


153

Tôi đã làm theo hướng dẫn git nhưng tôi gặp vấn đề kỳ lạ này khi cố gắng kết nối với 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

Đây là tập tin cấu hình của tôi dưới .ssh

Host github.com
    User git
    Hostname github.com
    PreferredAuthentications publickey
    IdentityFile "C:\Documents and Settings\mugues\.ssh\id_rsa"
    TCPKeepAlive yes
    IdentitiesOnly yes

Bất kỳ ý tưởng?


Có cái này hôm nay. Và có vẻ như Github đã suy sụp.
ysrb

TL; DR: Bỏ qua "số tập tin xấu". Thông tin bạn đang tìm kiếm không có trong tin nhắn đó. Nó có thể có nghĩa là bất cứ điều gì. Chi tiết về stackoverflow.com/a/22788046
Stéphane Gourichon

Câu trả lời:


186

Sau khi gặp vấn đề này, tôi đã tìm ra giải pháp hiệu quả cho mình:

Thông báo lỗi:

    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

Bạn sẽ chỉ thấy thông báo số tập tin xấu khi trên windows sử dụng shell MINGGW. Người dùng Linux sẽ chỉ bị hết thời gian.

Vấn đề:

SSH có thể bị chặn trên cổng 22. Bạn có thể thấy điều này bằng cách gõ

    $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

Như bạn có thể thấy trạng thái được Lọc, có nghĩa là một cái gì đó đang chặn nó. Bạn có thể giải quyết điều này bằng cách thực hiện SSH tới cổng 443 (tường lửa / isp của bạn sẽ không chặn điều này). Điều quan trọng nữa là bạn cần ssh thành "ssh.github.com" thay vì github.com. Nếu không, bạn sẽ báo cáo cho máy chủ web thay vì máy chủ ssh. Dưới đây là tất cả các bước cần thiết để giải quyết vấn đề này.

Giải pháp:

(Trước hết, hãy đảm bảo bạn đã tạo các khóa của mình như được giải thích trên http://help.github.com/win-set-up-git/ )

tạo tập tin ~ / .ssh / config (tập tin ssh config nằm trong thư mục người dùng của bạn. Có lẽ trên windows %USERPROFILE%\.ssh\config

Dán đoạn mã sau vào đó:

    Host github.com
    User git
    Hostname ssh.github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa
    Port 443

Lưu các tập tin.

Thực hiện ssh như bình thường:

$ssh -T github.com 
    $Enter passphrase for key '.......... (you can smile now :))

Lưu ý rằng tôi không phải cung cấp tên người dùng hoặc số cổng.


4
Nói cách khác, bạn thiết lập kết nối SSH qua cổng HTTPS .
Enrico Campidoglio

1
Tại "Dán đoạn mã sau vào đó:", tôi không hiểu. Làm thế nào tôi có thể giải quyết số tập tin xấu? Tôi có nên tạo nó và lưu dưới dạng tập tin notepad không?
David Dimalanta

27
Thay vào đó tôi nhận đượcssh: connect to host ssh.github.com port 443: Bad file number
cqcn1991

Điều này cũng hoạt động cho bitbucket.org, khi thiết lập hoạt động trước đây của tôi đột nhiên ngừng hoạt động. Phần tốt nhất là điều duy nhất tôi phải làm là thay đổi tệp cấu hình SSH.
Kevin Condon

2
Khi sử dụng .ssh/configtệp trên windows 7, hãy đảm bảo bạn có Var người dùng môi trường HOMEvới %USERPROFILE%giá trị -> đã giúp tôi, khi ssh của tôi không thể tìm thấy nó
Jook 18/07/14

40

Thông tin chính được viết trong câu trả lời của @ Sam nhưng không thực sự nổi bật, vì vậy hãy làm rõ.

"Số tệp xấu" không mang tính thông tin, đó chỉ là dấu hiệu của việc chạy ssh của git trên Windows.

Dòng xuất hiện ngay cả khi không có -vcông tắc:

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

là thực sự không liên quan .

Nếu bạn tập trung vào nó, bạn sẽ lãng phí thời gian vì nó không phải là một gợi ý về vấn đề thực sự là gì, chỉ là một hiệu ứng của việc chạy ssh git trên Windows. Thậm chí đó không phải là dấu hiệu cho thấy cài đặt hoặc cấu hình git hoặc ssh sai. Thực sự, bỏ qua nó .

Lệnh tương tự trên Linux được tạo ra thay cho thông báo này đối với tôi, đã đưa ra một gợi ý thực sự về vấn đề:

ssh: connect to host (some host or IP address) port 22: Connection timed out

Giải pháp thực tế: bỏ qua "số tập tin xấu" và nhận thêm thông tin

Tập trung vào các dòng được thêm vào với -vdòng lệnh. Trong trường hợp của tôi, đó là:

debug1: connect to address (some host or IP address) port 22: Attempt to connect timed out without establishing a connection

Vấn đề của tôi là một lỗi đánh máy trong địa chỉ IP, nhưng bạn có thể khác.

Đây là câu hỏi về "số tập tin xấu", hoặc về nhiều lý do tại sao một kết nối có thể hết thời gian?

Nếu ai đó có thể chứng minh rằng "số tệp xấu" chỉ xuất hiện khi lý do thực sự là "hết thời gian kết nối" thì sẽ có ý nghĩa để giải quyết lý do tại sao kết nối có thể hết thời gian.

Cho đến lúc đó, "số tập tin xấu" chỉ là một thông báo lỗi chung và câu hỏi này được trả lời đầy đủ bằng cách nói "bỏ qua nó và tìm kiếm các thông báo lỗi khác".

EDIT: Qwertie đã đề cập rằng thông báo lỗi thực sự là chung chung, vì nó cũng có thể xảy ra trên "Kết nối bị từ chối". Điều này xác nhận phân tích.

Xin đừng lộn xộn câu hỏi này với các gợi ý và câu trả lời chung chung, chúng không liên quan gì đến chủ đề thực tế (và tiêu đề) của câu hỏi này là "Lỗi Git SSH: Lỗi Kết nối với máy chủ: Số tập tin xấu". Nếu sử dụng -vbạn có nhiều thông điệp thông tin xứng đáng với câu hỏi của riêng họ, sau đó mở một câu hỏi khác, sau đó bạn có thể tạo một liên kết đến nó.


1
Yup, thêm -v vào scpdòng lệnh của tôi đã thêm "debug1: kết nối với địa chỉ 216.34.181,70 cổng 22: Kết nối bị từ chối" trước "Số tệp xấu" vì vậy không phải lúc nào cũng là lỗi "hết thời gian".
Qwertie

Ồ, Windows luôn hiển thị các thông báo lỗi mơ hồ, ngay cả khi công cụ này thường được sử dụng trên Linux và các hệ thống tương tự UNIX khác ...
lilydjwg 19/03/2016


5

Có thể tường lửa hoặc ứng dụng chặn của bạn (PeerBlock, v.v.) đang chặn cổng của bạn


5

Bạn cũng có thể thử:

telnet example.com 22

để xem bạn có kết nối với máy chủ không. Tôi thấy thông báo này và nó đã trở thành VPN mà tôi đang sử dụng đang chặn truy cập. Ngắt kết nối với VPN và tôi đã rất tốt để đi.


4

Những gì tôi tìm thấy là, điều này xảy ra khi kết nối của bạn kém. Tôi đã có nó một vài phút trước khi đẩy vào repo của tôi, nó liên tục thất bại và một lúc sau đó, kết nối bị hỏng.

Sau khi nó trở lại, sự thúc đẩy ngay lập tức đi qua.

Tôi tin rằng nó có thể được gây ra bởi sự sụt giảm kết nối từ phía bạn hoặc của họ.


1
Tôi cũng gặp lỗi này khi sử dụng Verizon Jetpack, dường như bị mất kết nối khi tôi sử dụng ssh từ hai thiết bị riêng biệt. Vì vậy, một cái gì đó trong Jetpack bị mất kết nối và tôi gặp bad file numberlỗi khi kết nối bị hỏng.
cod3monk3y

1
Tôi gặp lỗi này khi sử dụng kết nối hotspot điện thoại với máy tính xách tay của mình.
Lucas Morgan

@LucasMorgan giống nhau ở đây. Đó là những gì tôi đã sử dụng khi điều này xảy ra.
băng giá

3

Nếu SSH bị chặn trên 22

chỉ cần cập nhật originlên https

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

xác minh rằng những thay đổi đã được thực hiện

git remote -v


chính xác, tuy nhiên bạn sẽ phải làm điều này cho mọi kho lưu trữ với phương pháp này. Trong một tập tin cấu hình, nó được áp dụng trên toàn cầu.
Sam

2

Tôi chỉ gặp vấn đề tương tự và thử mọi giải pháp mà tôi có thể tìm thấy, nhưng không có giải pháp nào hiệu quả. Cuối cùng, tôi đã thử bỏ Git Bash và mở lại, và mọi thứ hoạt động hoàn hảo.

Vì vậy, hãy thử thoát khỏi Git Bash và mở lại nó.


2

Cố gắng thoát khỏi trường hợp git bash thông qua đó bạn đã thiết lập và thử mở lại. Cuối cùng nó đã làm việc cho tôi.


10
" Cuối cùng đã làm việc cho tôi" khiến tôi nghĩ rằng bạn có thể đã làm những việc khác trong quá trình có thể đã đóng góp.
Jake Berger

1

Trên windows tôi đã cố gắng thoát git bash và chạy lại nhưng không được, cuối cùng tôi (bực bội) đã khởi động lại và nó hoạt động vào lần tiếp theo :)


1

Kiểm tra kỹ xem bạn đã xuất bản khóa công khai qua giao diện Quản trị GitHub chưa.

Sau đó, đảm bảo rằng cổng 22 không bị chặn bằng cách nào đó (như được minh họa trong câu hỏi này )


1
>> Trước tiên, hãy đảm bảo 'git' là tên tài khoản người dùng GitHub của bạn. Theo mô tả trên hướng dẫn git: Kiểm tra mọi thứ. Để đảm bảo mọi thứ đều hoạt động, bạn sẽ SSH tới GitHub. Đừng thay đổi phần git@github.com. Điều đó đáng lẽ phải ở đó. >> Sau đó, đảm bảo cổng 22 không bị chặn bằng cách nào đó -> Tôi đã tắt tường lửa xp nhưng không có gì thay đổi.
Massimo Ugues

1

Trong trường hợp của tôi, địa chỉ IP của máy chủ git của chúng tôi đã thay đổi.

Chỉ cần xóa bộ đệm DNS đã khắc phục sự cố.


0

Tạo tập tin cấu hình để sử dụng cổng 443 không hiệu quả với tôi. Cuối cùng tôi đã cố gắng tắt kết nối wifi, bật lại và vấn đề biến mất. Kỳ dị. Giải pháp ngớ ngẩn nhưng nó có thể giúp ai đó :)


0

Kiểm tra điều khiển từ xa bằng git remote -v Một cái gì đó như ssh: /// gituser @ myhost: /git/dev.git

là sai vì dấu gạch chéo ///


0

Tôi đã thấy vấn đề này khi tôi truy cập bitbucket trong mạng công ty, trong khi git hoạt động tốt trong mạng gia đình.

$ git pull
ssh: connect to host bitbucket.org port 22: Bad file number
fatal: Could not read from remote repository.

Tôi đã sử dụng giao thức https để khắc phục điều này.

$ git pull https://myaccount@bitbucket.org/myaccount/myrepo.git
Password for 'https://myaccount@bitbucket.org':

Vui lòng sử dụng các từ tương ứng để thay thế "myaccount" và "myrepo".


0

Giải pháp sau đây có hiệu quả với tôi khi cố gắng SSH vào phiên bản Ubuntu AWS EC2 từ PC Windows 7 (32 Bit) của tôi đằng sau tường lửa của công ty để thiết lập Proxy-

Thêm khối sau vào C:\Users\<YOUR_WINDOWS_USER>\.ssh\configtệp-

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

Bạn sẽ cần thêm cấu hình tương tự cho mỗi máy chủ mà bạn muốn SSH vào.


-1

Tôi gặp sự cố khi mở FileZilla-Connection trên Windows. Đã đóng FileZilla -> Đã giải quyết vấn đề.


-1

Đây là giải pháp đơn giản để lưu một số thao tác gõ, bạn có thể sử dụng các bước sau trong git bash một cách dễ dàng ..

(1) tạo kho lưu trữ từ xa

git remote add origin https://{your_username}:{your_password}@github.com/{your_username}/repo.git

Lưu ý: Nếu mật khẩu của bạn chứa dấu '@', hãy sử dụng '% 40' thay vì đó

(2) Sau đó, làm bất cứ điều gì bạn muốn với kho lưu trữ từ xa

ex:- git push origin master

-2

Trong trường hợp của tôi chỉ cần khởi động lại bộ định tuyến WiFi đã giúp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.