VPS

Khóa SSH: tạo, dùng và quản lý cho nhiều máy

Thanh Nguyễn Đăng 9 phút đọc 6 khối lệnh

Khóa SSH: tạo, dùng và quản lý cho nhiều máy
Mục lục bài viết
  1. Tạo khóa đúng loại
  2. Cài khóa lên máy chủ
  3. Tắt đăng nhập bằng mật khẩu
  4. Quản lý khi có nhiều khóa
  5. Những sai lầm hay gặp
  6. Bảng sai lầm về khóa và cách làm đúng
  7. Tạo, cài và rà soát
  8. Quản lý khi có nhiều khóa và nhiều máy
  9. Câu hỏi thường gặp
  10. Bài viết liên quan

Trả lời nhanh: Khóa SSH là cặp khóa thay cho mật khẩu khi đăng nhập máy chủ: phần công khai đặt trên máy chủ, phần riêng giữ trên máy bạn và không bao giờ rời khỏi đó. Ba việc nên làm ngay: tạo khóa loại ed25519 vì ngắn và mạnh, đặt mật khẩu bảo vệ cho khóa riêng để mất máy không mất luôn quyền vào server, và tắt hẳn đăng nhập bằng mật khẩu sau khi đã chắc chắn khóa hoạt động. Riêng việc cuối cắt đứt toàn bộ các đợt dò mật khẩu tự động.

Máy chủ nào mở cổng SSH ra internet cũng bị dò mật khẩu, thường là vài nghìn lượt mỗi ngày, bắt đầu ngay trong giờ đầu tiên sau khi máy lên mạng. Mật khẩu mạnh giúp bạn sống sót, nhưng khóa SSH thì làm cho toàn bộ chuyện dò đoán trở nên vô nghĩa. Bài này đi từ tạo khóa tới quản lý khi bạn đã có mười máy chủ và ba dịch vụ Git.

Tạo khóa đúng loại

TerminalTạo khóa đúng loạibash
ssh-keygen -t ed25519 -C "laptop-cong-viec"# Nhan Enter de dung duong dan mac dinh# Nhap mat khau bao ve khoa rieng khi duoc hoi

Kết quả là hai file trong ~/.ssh: id_ed25519 là khóa riêng và không bao giờ được chia sẻ, còn id_ed25519.pub là khóa công khai, chép đi đâu cũng được.

Vì sao chọn ed25519: khóa ngắn hơn nhiều so với loại cũ nhưng độ an toàn tương đương hoặc hơn, và tốc độ xác thực nhanh hơn. Loại rsa vẫn dùng được nếu bạn phải làm việc với hệ thống cũ, khi đó hãy chọn độ dài từ 4096 bit.

Phần ghi chú ở cuối lệnh nên đặt theo tên máy chứ không phải tên người. Sau này nhìn danh sách khóa trên máy chủ bạn sẽ biết ngay khóa nào của máy nào để gỡ khi máy đó bị mất.

Cài khóa lên máy chủ

TerminalCài khóa lên máy chủbash
# Cach gon nhatssh-copy-id nguoidung@dia-chi-may-chu # Neu khong co lenh docat ~/.ssh/id_ed25519.pub | ssh nguoidung@may-chu   "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Quyền thư mục quan trọng: SSH từ chối dùng file khóa nếu quyền quá rộng, và nó im lặng quay về hỏi mật khẩu chứ không báo lỗi rõ ràng. Thư mục phải là 700 và file phải là 600.

Sau khi cài, mở một phiên mới để thử trước khi đóng phiên hiện tại. Đây là thói quen cứu người: nếu cấu hình sai mà bạn đã đóng hết phiên thì đường vào duy nhất còn lại là bảng điều khiển của nhà cung cấp.

Tắt đăng nhập bằng mật khẩu

Chỉ làm bước này sau khi đã đăng nhập bằng khóa thành công ít nhất một lần.

TerminalTắt đăng nhập bằng mật khẩubash
# /etc/ssh/sshd_configPasswordAuthentication noPermitRootLogin prohibit-passwordPubkeyAuthentication yes
TerminalTắt đăng nhập bằng mật khẩubash
sudo sshd -t          # kiem tra cu phap truocsudo systemctl reload ssh

Dòng thứ hai cho phép vào bằng tài khoản quản trị nhưng chỉ qua khóa, không qua mật khẩu. Nếu bạn đã có tài khoản thường dùng với quyền nâng cấp, hãy đặt hẳn thành cấm để bề mặt tấn công nhỏ hơn nữa.

Sau bước này, mọi đợt dò mật khẩu tự động đều thất bại ngay từ đầu vì máy chủ không còn nhận mật khẩu. Đây là thay đổi đơn lẻ có hiệu quả bảo mật cao nhất mà bạn làm được trong năm phút, và nó nằm trong danh sách việc đầu tiên ở bài 12 việc sau khi nhận VPS.

Quản lý khi có nhiều khóa

Nguyên tắc: một khóa cho một máy của bạn, không phải một khóa cho một máy chủ. Laptop một khóa, máy để bàn một khóa, máy chủ dùng làm nơi làm việc một khóa. Lý do rất thực dụng: mất laptop thì bạn chỉ cần gỡ đúng một khóa khỏi các máy chủ, thay vì phải đổi tất cả.

Với dịch vụ Git, hãy tạo khóa riêng thay vì dùng chung khóa đăng nhập máy chủ. Khi đó bạn thu hồi quyền truy cập mã nguồn mà không đụng tới quyền vào server.

Tác nhân quản lý khóa giúp bạn khỏi gõ mật khẩu bảo vệ ở mỗi lần kết nối:

TerminalQuản lý khi có nhiều khóabash
eval "$(ssh-agent -s)"ssh-add ~/.ssh/id_ed25519

Còn khi cần nhảy qua một máy trung gian để vào máy trong mạng nội bộ, hãy dùng cấu hình chuyển tiếp thay vì chép khóa riêng lên máy trung gian. Chép khóa riêng lên máy khác là đánh mất toàn bộ ý nghĩa của việc dùng khóa. Cách viết file cấu hình cho gọn nằm ở bài riêng trong cụm này.

Những sai lầm hay gặp

Đưa khóa riêng vào repo. Xảy ra nhiều hơn bạn tưởng, thường là do chép cả thư mục cấu hình vào repo dotfiles. Chỉ đưa file cấu hình, không bao giờ đưa khóa. Nguyên tắc này nằm ở bài dotfiles.

Khóa không có mật khẩu bảo vệ. Tiện lúc dùng nhưng ai cầm được máy bạn là vào thẳng mọi máy chủ. Dùng tác nhân quản lý khóa thì bạn chỉ gõ một lần mỗi phiên, không có lý do gì để bỏ lớp bảo vệ này.

Không gỡ khóa cũ. Nhân viên nghỉ việc, laptop bị thay, nhưng khóa vẫn nằm trong danh sách được phép trên máy chủ. Hãy rà file khóa được phép định kỳ, và đó chính là lúc phần ghi chú tên máy phát huy tác dụng.

Mở SSH ra cả internet khi không cần. Nếu chỉ mình bạn và đội quản trị cần vào, hãy để máy chủ chỉ nhận kết nối trong mạng riêng theo bài Tailscale. Không mở thì không có gì để dò.

Bảng sai lầm về khóa và cách làm đúng

Sai lầmHậu quảCách đúng
Dùng chung một khóa cho cả độiThu hồi quyền một người là phải đổi cho tất cảMỗi người một khóa riêng
Copy khóa riêng sang nhiều máyKhóa lộ ở một máy là lộ tất cảMỗi máy một khóa riêng, cùng trỏ về một tài khoản
Không đặt mật khẩu cho khóa riêngAi lấy được tệp là dùng được ngayĐặt mật khẩu, dùng công cụ giữ khóa để đỡ phải gõ lại
Đưa khóa riêng vào kho mã nguồnCông cụ quét tự động tìm ra trong vài phútKhông bao giờ; thêm vào danh sách loại trừ
Không thu hồi khi nhân viên nghỉNgười đã nghỉ vẫn vào được máy chủĐưa vào quy trình nghỉ việc

Sai lầm cuối là lỗ hổng phổ biến nhất ở doanh nghiệp Việt Nam: nhân viên nghỉ nhiều tháng mà khóa của họ vẫn nằm trong tệp cho phép trên máy chủ, và không ai rà lại.

Tạo, cài và rà soát

TerminalTạo, cài và rà soátbash
# Tao khoa loai hien dai, ngan va nhanh hon loai cussh-keygen -t ed25519 -C "ten-ban@may-lam-viec" -f ~/.ssh/id_ed25519 # Cai len may chussh-copy-id -i ~/.ssh/id_ed25519.pub nguoi-dung@may-chu # Tat dang nhap bang mat khau SAU KHI da thu dang nhap bang khoa thanh congsed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_configsed -i 's/^#\?PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_configsshd -t && systemctl restart sshd # RA SOAT: khoa nao dang duoc phep vao may chucat ~/.ssh/authorized_keysfor u in $(ls /home); do  echo "=== $u"; cat /home/$u/.ssh/authorized_keys 2>/dev/nulldone # Xem ai da dang nhap gan daygrep "Accepted publickey" /var/log/auth.log | tail -20

Chú ý thứ tự: thử đăng nhập bằng khóa thành công trước, rồi mới tắt đăng nhập bằng mật khẩu. Làm ngược lại là tự khóa mình ngoài máy chủ.

Quản lý khi có nhiều khóa và nhiều máy

  • Ghi chú trong tệp cho phép: mỗi dòng khóa thêm phần mô tả người và máy. Không có việc này thì sau một năm không ai biết khóa nào của ai.
  • Giới hạn quyền cho khóa dùng vào việc tự động: khóa triển khai chỉ nên chạy được một tập lệnh, không mở phiên đăng nhập đầy đủ.
  • Rà soát mỗi quý bằng lệnh liệt kê ở trên, đối chiếu với danh sách nhân sự.
  • Với nhiều máy chủ, dùng tệp cấu hình để đặt bí danh, xem bài về tệp cấu hình SSH.

Câu hỏi thường gặp

Khóa ed25519 hay rsa tốt hơn?

Ed25519 tốt hơn cho hầu hết trường hợp: ngắn hơn, nhanh hơn, an toàn tương đương hoặc hơn. Chỉ dùng rsa khi phải làm việc với hệ thống cũ không hỗ trợ, và khi đó chọn độ dài từ 4096 bit.

Mất khóa riêng thì sao?

Bạn mất quyền vào các máy chủ đã cài khóa đó, nhưng người khác cũng không vào được nếu khóa có mật khẩu bảo vệ. Đường xử lý là vào máy chủ qua bảng điều khiển của nhà cung cấp, gỡ khóa cũ khỏi danh sách và cài khóa mới.

Có nên dùng một khóa cho tất cả máy chủ không?

Được về mặt kỹ thuật nhưng nên chia theo máy của bạn: mỗi thiết bị một khóa. Khi mất một thiết bị, bạn chỉ gỡ đúng khóa của nó thay vì phải thay khóa trên mọi máy chủ.

Tắt đăng nhập mật khẩu có rủi ro bị khóa ngoài không?

Có nếu bạn tắt trước khi thử khóa. Luôn mở một phiên mới đăng nhập bằng khóa thành công rồi mới đóng phiên cũ. Ngoài ra hầu hết nhà cung cấp đều có bảng điều khiển truy cập trực tiếp làm đường dự phòng.

Chia sẻ:Facebook

Thanh Nguyễn

TND

Tư vấn bản quyền, VPS và máy chủ kèm hóa đơn VAT, hợp đồng đầy đủ cho doanh nghiệp.