Bối cảnh: Sự khó chịu khi SSH bị ngắt kết nối
Hãy hình dung tình huống này: bạn đang cố gắng SSH vào một máy chủ. Có thể đó là một máy chủ hoàn toàn mới bạn vừa cấp phát, hoặc một "người bạn cũ" bạn đã không đụng tới một thời gian. Bạn tự tin về tên người dùng và địa chỉ IP của máy chủ. Nhưng thay vì lời nhắc mật khẩu quen thuộc hay đăng nhập bằng khóa một cách trôi chảy, bạn bị ngắt kết nối đột ngột. Một thông báo khó hiểu xuất hiện, thường là sau một lúc tạm dừng ngắn, khiến bạn băn khoăn liệu máy chủ có thực sự kiểm tra thông tin đăng nhập của bạn hay không.
Lỗi cụ thể này, Too many authentication failures, là một trở ngại phổ biến và gây khó chịu, đặc biệt đối với những người dùng quản lý nhiều khóa SSH hoặc có thư mục ~/.ssh không được tổ chức. Về cơ bản, máy chủ đang nói với bạn, "Bạn đã thử quá nhiều cách khác nhau để chứng minh danh tính của mình trong một lần kết nối này, vì vậy tôi sẽ ngắt kết nối bạn."
Thông báo lỗi chính xác bạn đang thấy
Received disconnect from 192.168.1.100 port 22:2: Too many authentication failures
Authentication failed.
Quá trình gỡ lỗi: Khám phá bí ẩn "quá nhiều"
Khi bạn gặp lỗi "Too many authentication failures" sau đó là ngắt kết nối, thường thì không phải do khóa hoặc mật khẩu cụ thể của bạn không chính xác (mặc dù đó luôn là một khả năng). Thay vào đó, máy khách SSH của bạn có thể đang cung cấp quá nhiều phương thức xác thực khác nhau cho máy chủ trong một lần kết nối.
Máy chủ áp đặt một giới hạn, thường được kiểm soát bởi cài đặt MaxAuthTries (thường mặc định là 6 trên nhiều máy chủ OpenSSH). Khi đạt đến giới hạn này, máy chủ sẽ trở nên nghi ngờ và đơn giản là đóng kết nối.
Bước 1: Lấy đầu ra SSH chi tiết (verbose)
Bước đầu tiên để gỡ lỗi bất kỳ vấn đề SSH nào là thêm cờ -v (hoặc nhiều cờ -vvv để có thêm chi tiết). Điều này sẽ cho bạn thấy chính xác những gì máy khách của bạn đang làm, bao gồm cả những khóa nào nó đang cố gắng sử dụng.
ssh -v user@your_server_ip
Tìm các dòng tương tự như sau trong đầu ra:
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/youruser/.ssh/id_rsa RSA SHA256:... agent
debug1: Server accepts key: /home/youruser/.ssh/id_rsa RSA SHA256:...
debug1: Offering public key: /home/youruser/.ssh/id_dsa DSA SHA256:... agent
debug1: Offering public key: /home/youruser/.ssh/id_ecdsa ECDSA SHA256:... agent
debug1: Offering public key: /home/youruser/.ssh/id_ed25519 ED25519 SHA256:... agent
debug1: Offering public key: /home/youruser/.ssh/my_project_key RSA SHA256:... agent
debug1: Offering public key: /home/youruser/.ssh/another_old_key RSA SHA256:... agent
... (đang cung cấp thêm nhiều khóa)
Received disconnect from 192.168.1.100 port 22:2: Too many authentication failures
Authentication failed.
Nếu đầu ra này cho thấy máy khách của bạn đang cung cấp nhiều khóa công khai, bạn có thể đã xác định được nguyên nhân gốc rễ. Máy khách của bạn đang cố gắng sử dụng mọi khóa mà nó tìm thấy trong thư mục ~/.ssh/ của bạn, cộng với bất kỳ khóa nào được tải vào ssh-agent của bạn. Đến lượt mình, máy chủ đạt đến giới hạn MaxAuthTries nội bộ của nó trước khi bạn kịp có cơ hội cung cấp khóa hoặc mật khẩu chính xác.
Giải pháp: Hạn chế sự "nhiệt tình" của máy khách
Giải pháp cốt lõi liên quan đến việc hướng dẫn máy khách SSH của bạn chọn lọc hơn trong việc cung cấp các khóa của nó. Bạn cần chỉ rõ danh tính nào sẽ sử dụng cho một kết nối cụ thể.
Phương pháp 1: Chỉ định rõ ràng tệp danh tính (Sửa lỗi nhanh)
Cách nhanh nhất để bỏ qua vấn đề này cho một kết nối duy nhất là chỉ định chính xác cho SSH tệp khóa riêng tư nào sẽ sử dụng bằng cờ -i.
ssh -i ~/.ssh/path/to/your/correct_private_key user@your_server_ip
Ví dụ, nếu khóa riêng tư của bạn cho máy chủ là ~/.ssh/server_prod_key:
ssh -i ~/.ssh/server_prod_key your_username@192.168.1.100
Điều này buộc máy khách chỉ cung cấp khóa cụ thể đó, giảm đáng kể số lần thử xác thực.
Phương pháp 2: Cấu hình máy khách SSH của bạn (Sửa lỗi vĩnh viễn)
Để có một giải pháp vĩnh viễn và gọn gàng hơn, đặc biệt nếu bạn thường xuyên kết nối với máy chủ này, bạn nên cấu hình hành vi của máy khách SSH trong tệp cấu hình của nó, ~/.ssh/config.
- Tạo hoặc chỉnh sửa
~/.ssh/config: Nếu tệp không tồn tại, hãy tạo nó. Đảm bảo quyền của nó được đặt nghiêm ngặt (chmod 600 ~/.ssh/config). - Thêm một mục Host: Thêm một khối cho máy chủ của bạn, chỉ định
IdentitiesOnly yesvàIdentityFile.
Host your_server_alias
HostName 192.168.1.100
User your_username
IdentitiesOnly yes
IdentityFile ~/.ssh/path/to/your/correct_private_key
# Port 22 # Bỏ chú thích và thay đổi nếu máy chủ SSH của bạn sử dụng cổng khác
# PreferredAuthentications publickey # Tùy chọn: Ưu tiên xác thực bằng khóa
Thay thế your_server_alias, 192.168.1.100, your_username, và ~/.ssh/path/to/your/correct_private_key bằng các giá trị thực của bạn.
Bây giờ, bạn có thể kết nối đơn giản bằng cách sử dụng bí danh:
ssh your_server_alias
Chỉ thị IdentitiesOnly yes rất quan trọng ở đây. Nó hướng dẫn máy khách SSH chỉ sử dụng các tệp danh tính xác thực được cấu hình rõ ràng cho máy chủ đó thông qua IdentityFile. Điều này có nghĩa là nó sẽ bỏ qua bất kỳ khóa nào được tải trong ssh-agent hoặc các tệp danh tính mặc định khác được tìm thấy trong ~/.ssh/.
Phương pháp 3: Quản lý SSH Agent của bạn (Nếu áp dụng)
Nếu bạn đang sử dụng ssh-agent và đã tải nhiều khóa vào đó, máy khách của bạn có thể đang cung cấp tất cả chúng. Bạn có thể quản lý các khóa đã tải vào agent của mình:
- Liệt kê các khóa đã tải:
ssh-add -l
- **Xóa tất cả các khóa khỏi agent:** (Sử dụng cẩn thận, vì điều này ảnh hưởng đến tất cả các kết nối hiện tại đang sử dụng agent)
```bash
ssh-add -D
- Chỉ thêm khóa (hoặc các khóa) cụ thể bạn cần:
ssh-add ~/.ssh/path/to/your/correct_private_key
Phương pháp này đặc biệt hữu ích nếu vấn đề chính bắt nguồn từ một `ssh-agent` quá tải, thay vì một thư mục `~/.ssh` lộn xộn hoặc hành vi mặc định của máy khách.
### Những cân nhắc phía máy chủ (Ít phổ biến hơn đối với lỗi này)
Mặc dù lỗi này chủ yếu là vấn đề phía máy khách, nhưng cũng đáng để hiểu sơ qua về một cài đặt phía máy chủ: `MaxAuthTries` trong `/etc/ssh/sshd_config`. Cài đặt này quy định số lần thử xác thực tối đa mà máy chủ sẽ cho phép mỗi kết nối.
Giá trị mặc định thường là 6. Vì vậy, nếu máy khách của bạn được cấu hình để gửi, giả sử, 10 khóa, bạn chắc chắn sẽ đạt đến giới hạn này. Tuy nhiên, đối với thông báo cụ thể 'Too many authentication failures', máy khách gần như luôn là nguyên nhân gây ra lỗi vì đã cung cấp quá nhiều tùy chọn.
Nếu bạn *muốn* sửa đổi điều này trên máy chủ (điều này thường không được khuyến nghị trừ khi bạn có lý do chính đáng, vì nó có thể làm giảm bảo mật):
```ini
# Trên máy chủ, chỉnh sửa /etc/ssh/sshd_config
MaxAuthTries 10 # Tăng giá trị này, sau đó khởi động lại sshd
Hãy nhớ khởi động lại daemon SSH sau bất kỳ thay đổi nào đối với sshd_config:
sudo systemctl restart sshd # Đối với các hệ thống dựa trên systemd
# HOẶC
sudo service sshd restart # Đối với các hệ thống init cũ hơn
Một lần nữa, đây hiếm khi là cách khắc phục chính cho lỗi Too many authentication failures, thường có nghĩa là máy khách đang gửi quá nhiều khóa khác nhau, chứ không phải chỉ lặp đi lặp lại lỗi với một khóa.
Xác minh: Xác nhận việc khắc phục
Sau khi áp dụng một trong các giải pháp trên (ưu tiên Phương pháp 1 hoặc 2), hãy thử kết nối lại với máy chủ của bạn:
ssh user@your_server_ip # Nếu sử dụng Phương pháp 1 cho một lần duy nhất
# HOẶC
ssh your_server_alias # Nếu sử dụng Phương pháp 2 với ~/.ssh/config
Nếu cách khắc phục hiệu quả, bây giờ bạn sẽ được nhắc nhập mật khẩu khóa SSH (nếu khóa của bạn có) hoặc đăng nhập trực tiếp vào máy chủ. Ngoài ra, bạn có thể được nhắc nhập mật khẩu nếu xác thực bằng khóa chưa được thiết lập hoặc thất bại đối với khóa chính xác.
Bài học rút ra & Phòng ngừa
- Giữ
~/.sshgọn gàng: Thường xuyên kiểm tra thư mục~/.sshcủa bạn. Xóa các cặp khóa cũ, không sử dụng hoặc trùng lặp. Một thư mục~/.sshlộn xộn là nguyên nhân phổ biến của lỗi này. - Chỉ rõ ràng với Cấu hình SSH: Sử dụng
~/.ssh/configvớiIdentitiesOnly yesvàIdentityFilecho mỗi máy chủ bạn kết nối là một thực hành tốt nhất. Cách tiếp cận này giúp các kết nối của bạn dễ đoán và ngăn chặn hiệu quả lỗi cụ thể này. - Hiểu về SSH Agent: Nếu bạn sử dụng
ssh-agent, hãy lưu ý số lượng khóa bạn đã tải. Mặc dù tiện lợi, quá nhiều khóa có thể dẫn đến vấn đề này. - Bảo mật khóa của bạn: Luôn bảo vệ các khóa riêng tư của bạn bằng các cụm mật khẩu mạnh.
Đề xuất công cụ: Để có mật khẩu mạnh và bảo mật
Mặc dù khóa SSH thường được ưu tiên để truy cập máy chủ, bạn vẫn có thể cần mật khẩu mạnh cho việc thiết lập ban đầu, tài khoản hệ thống hoặc các dịch vụ liên quan khác. Khi tôi cần tạo một mật khẩu thực sự ngẫu nhiên và mạnh mẽ, tôi thường sử dụng ToolCraft's Password Generator.
Đây là một công cụ đơn giản, dựa trên trình duyệt, đặc biệt hữu ích vì nó xử lý tất cả quá trình tạo mật khẩu cục bộ—nghĩa là không có dữ liệu nào rời khỏi trình duyệt của bạn, một lợi thế đáng kể về quyền riêng tư. Bạn có thể tìm thấy nó tại https://toolcraft.app/en/tools/security/password-generator. Đây là một tiện ích hữu ích để giữ trong bộ công cụ của bạn cho bất kỳ tình huống nào yêu cầu thông tin xác thực mạnh mẽ.

