2014-09-01 38 views
28

Gần đây, tôi đã tạo mã kết nối với trạm làm việc với tên người dùng khác nhau (nhờ khóa riêng) dựa trên paramiko.Paramiko: Lỗi khi đọc biểu ngữ giao thức SSH

Tôi chưa bao giờ có bất kỳ vấn đề với nó, nhưng hôm nay, tôi có mà: SSHException: Error reading SSH protocol banner

Đây là kỳ lạ bởi vì nó xảy ra một cách ngẫu nhiên trên bất kỳ kết nối. Có cách nào để sửa nó k ?

+13

Điều này xảy ra nếu máy chủ chấp nhận kết nối nhưng trình nền ssh không phản hồi trong vòng 15 giây. Nó có thể là tắc nghẽn mạng, thiết bị chuyển mạch bị lỗi, vv ... nhưng thường có nghĩa là máy chủ đích bị sa lầy hoặc sshd của nó bị treo. Khôi phục là đợi và thử lại. Nếu bạn kiểm soát máy chủ, đây là thời điểm tốt để kiểm tra sức khỏe của máy chủ. – tdelaney

+1

Bạn có thể tạo lại lỗi này bằng cách tạo 10 luồng và mở/đóng các kết nối sftp nhanh nhất có thể trên tất cả chúng. Trình nền sshd không thể trả lời đúng lúc và ngoại lệ trên được ném ra. –

+0

Tôi vừa gặp sự cố trên một máy chủ. Khách hàng Openssh kết nối tốt, Paramiko thất bại. Nếu tôi telnet máy chủ, nó không viết dòng 'SSH-2.0-OpenSSH_6.0p1' ngay lập tức như tất cả các máy chủ khác làm. Không có ý tưởng về nguyên nhân. – Equidamoid

Trả lời

13

Điều đó tùy thuộc vào ý bạn là "khắc phục". Nguyên nhân cơ bản, như đã chỉ ra trong các ý kiến, là tắc nghẽn/thiếu tài nguyên. Theo cách đó, nó tương tự như một số mã HTTP. Đó là nguyên nhân bình thường, có thể máy chủ ssh đang trả về dữ liệu tiêu đề sai.

429 Quá nhiều yêu cầu, yêu cầu khách hàng sử dụng giới hạn tốc độ hoặc đôi khi API sẽ trả lại 503 theo cách tương tự, nếu bạn vượt quá hạn ngạch. Ý tưởng là, để thử lại sau, với một sự chậm trễ.

Bạn có thể tìm cách xử lý ngoại lệ này trong mã của mình, đợi một lát và thử lại. Bạn cũng có thể chỉnh sửa tệp transport.py của mình, để đặt thời gian chờ biểu ngữ thành thứ gì đó cao hơn. Nếu bạn có một ứng dụng mà nó không quan trọng như thế nào một cách nhanh chóng máy chủ đáp ứng, bạn có thể thiết lập này để 60 giây.

+1

Khi tôi thực hiện chương trình của mình, nó cố gắng kết nối một cái gì đó như 500 lần trên một máy. Tôi nghĩ rằng máy chủ đã hạn chế truy cập của tôi để tránh các cuộc tấn công tàn bạo (tất nhiên, nó không phải là mục tiêu của chương trình của tôi). Câu trả lời của bạn là câu trả lời đúng trong trường hợp của tôi. – FunkySayu

Các vấn đề liên quan