Chắc ở đây cũng có nhiều anh em giống mình, có những ngày tưởng chừng mọi thứ đều ổn cho đến khi không thể SSH vào máy chủ được. Tự nhiên màn hình hiện lên dòng chữ Permission denied
quen thuộc. Cảm giác lúc đó thật sự rất khó tả.

SSH là một công cụ gần như không thể thiếu, nhưng đôi khi nó cũng “đỏng đảnh” và khó chiều. Hôm nay mình muốn chia sẻ một vài kinh nghiệm đau thương của mình với SSH, hy vọng có thể giúp ai đó đỡ mất thời gian hơn.
Cái lỗi mình hay gặp nhất và cũng cay nhất là Permission denied
kia. Thường thì nó có vài nguyên nhân thôi. Một là public key của mình chưa có trên server. Hai là quyền của file hoặc thư mục bị sai. Thường thì mình chỉ cần chạy một lệnh cat
để đẩy key qua, rồi chmod
lại mấy cái file như ~/.ssh
thành 700 và ~/.ssh/authorized_keys
thành 600 là được. Đa số trường hợp là ổn.
Rồi có những hôm dở khóc dở cười, ngồi đợi SSH kết nối mà nó cứ treo mãi rồi báo “timeout”. Những lúc như vậy, việc đầu tiên mình làm là ping
xem server có còn sống không. Nếu vẫn thấy tín hiệu, mình sẽ thử dùng ssh -v
để xem nó bị kẹt ở bước nào. Lắm lúc chỉ vì tường lửa trên server chặn mất cổng 22 thôi.
Cũng có một lỗi khác khá khó chịu là “Too Many Authentication Failures”. Lỗi này xảy ra khi máy mình có quá nhiều key SSH và nó cứ thử từng cái một cho đến khi server bực mình và từ chối. Những lúc như vậy, mình thường chỉ định rõ file key cần dùng bằng cách thêm ssh -i ~/.ssh/ten_file_key
.
À, còn một mẹo nhỏ cho những ai thấy việc đăng nhập SSH đôi khi bị chậm một cách vô lý. Bạn thử vào file /etc/ssh/sshd_config
trên máy chủ, tìm dòng UseDNS
và đổi nó thành UseDNS no
, sau đó khởi động lại dịch vụ SSH. Thường thì nó sẽ nhanh hơn đáng kể đấy.
Nói về SSH thì không thể không nhắc đến SSH key. Dùng nó tiện hơn gõ mật khẩu cả trăm lần. Chỉ cần chạy ssh-keygen
ở máy mình, rồi dùng ssh-copy-id
để bắn key lên server là xong. Từ đó về sau cứ ssh user@server
là vào thẳng, không cần mật khẩu gì nữa.
Trong quá trình làm việc, mình cũng học được vài thứ hay ho khác. Ví dụ, thay vì phải đăng nhập vào server để chạy một lệnh đơn giản như kiểm tra dung lượng đĩa, mình có thể chạy thẳng từ máy mình: ssh user@server "df -h"
. Rất tiện. Hay như việc dùng SSH tunnel để kết nối tới database trên server một cách an toàn, cứ như thể database đó đang chạy ở máy mình vậy.
Để bảo vệ server tốt hơn, mình cũng tập vài thói quen. Ví dụ như không bao giờ cho phép đăng nhập bằng tài khoản root, đổi cổng SSH mặc định từ 22 sang một cổng khác, và tắt luôn chức năng đăng nhập bằng mật khẩu, chỉ cho phép dùng key thôi. Mấy cái này đều chỉnh trong file /etc/ssh/sshd_config
cả.
Nói chung SSH nó mạnh thật nhưng cũng đỏng đảnh thật. Hiểu nó một tí thì làm việc cũng đỡ mệt hơn. Lần tới nếu có gặp lỗi, anh em cứ bình tĩnh, thử mấy cách trên xem sao nhé.