Khôi phục xác thực SSH trong PVE Cluster

Tổng quan

Trong quá trình quản trị hệ thống sử dụng Proxmox VE (PVE) cluster kết hợp với Ceph storage, việc đảm bảo các node có thể xác thực SSH với nhau là một yếu tố then chốt để duy trì hoạt động ổn định của cluster. Tuy nhiên, trong một tình huống không mong muốn, tôi đã vô tình xóa toàn bộ thư mục ~/.ssh/ trong khi chạy Ansible từ 1 node trong cluster.

Hậu quả là:

  • Không thể sử dụng VNC từ node này để mở VM trên node khác
  • Một số thao tác giữa các node gặp lỗi xác thực
  • Cluster hoạt động không ổn định do SSH trust bị mất

Qua bài viết này, tôi chia sẻ lại quá trình phân tích, khôi phục và những lưu ý quan trọng để tránh mắc phải lỗi tương tự – đồng thời giúp người quản trị hiểu sâu hơn về cơ chế xác thực nội bộ của PVE & Ceph.

1. Cơ chế xác thực nội bộ trong Proxmox VE và Ceph

🔑 1.1 Proxmox VE (PVE Cluster)

Proxmox sử dụng SSH để giao tiếp giữa các node trong cluster, bao gồm:

  • Quản lý tài nguyên
  • Di chuyển VM (migrate)
  • Truy cập VNC giữa các node

🗂 Các thư mục liên quan đến xác thực:

/root/.ssh/                     → SSH key cá nhân (dùng bởi người dùng root)
/etc/pve/priv/authorized_keys  → Danh sách SSH public key tin cậy trong PVE cluster
/etc/pve/priv/                 → Private keys và file config cluster

✅ PVE khi khởi tạo cluster sẽ tự động trao đổi SSH key và đưa vào /etc/pve/priv/authorized_keys để các node có thể điều khiển nhau mà không cần mật khẩu.

💡 Quan trọng: Việc xóa ~/.ssh không trực tiếp làm cluster lỗi, nhưng nếu bạn dùng ansible và thao tác gì đó ghi đè hoặc thay thế authorized_keys, thì cluster sẽ bị mất trust.

🧩 1.2 Ceph trong Proxmox

Ceph hoạt động nội bộ bằng cephx (cơ chế xác thực riêng), không phụ thuộc SSH để vận hành daemon.

🗂 Các file xác thực Ceph:

/etc/ceph/ceph.client.admin.keyring  → Key quản trị
/etc/ceph/ceph.conf                  → Cấu hình cluster
/var/lib/ceph/{mon,osd,...}         → Dữ liệu và key riêng của từng dịch vụ

Tuy nhiên, nếu bạn dùng ceph-deploy, ceph orch, hay ansible để triển khai, thì SSH sẽ cần thiết cho quá trình truyền file và lệnh giữa các node.

2. Tình huống thực tế:

Xóa nhầm ~/.ssh

Sau khi xóa toàn bộ ~/.ssh/ bằng dòng lệnh:

rm -f ~/.ssh/id_rsa ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

Tôi đã cố gắng tạo lại SSH key mới và dùng ssh-copy-id để thiết lập lại xác thực:

ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa

h(){
  ssh-copy-id -o StrictHostKeyChecking=no root@192.168.100.201
  ssh-copy-id -o StrictHostKeyChecking=no root@192.168.100.202
  ssh-copy-id -o StrictHostKeyChecking=no root@192.168.100.203
  ssh-copy-id -o StrictHostKeyChecking=no root@192.168.100.204
  ssh-copy-id -o StrictHostKeyChecking=no root@192.168.100.205
}; h

Mặc dù lệnh thực thi thành công, nhưng cluster vẫn chưa hoạt động ổn định. Lý do: các node khác vẫn không có public key của node vừa sửa/etc/pve/priv/authorized_keys cũng có thể đã bị mất thông tin.

3. Giải pháp khôi phục đúng cách

Bước 1: Tạo lại SSH key

ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa

Bước 2: Đồng bộ SSH key đến tất cả node

Thực hiện từ từng node:

for host in 192.168.100.201 192.168.100.202 192.168.100.203 192.168.100.204 192.168.100.205; do
  ssh-copy-id -o StrictHostKeyChecking=no root@$host
done

🔄 Lặp lại quá trình này từ mọi node để thiết lập full mesh SSH trust.

Bước 3: Kiểm tra trust nội bộ PVE

Kiểm tra file:

cat /etc/pve/priv/authorized_keys

Nếu thiếu key nào → thêm thủ công hoặc dùng:

pvecm updatecerts --force
systemctl restart pve-cluster

🔍 Sơ đồ xác thực giữa các node (ASCII)

      +------------+           +------------+
      |  Node A    |  <--->    |  Node B    |
      +------------+           +------------+
             |                        |
             +--> SSH Trust          |
             |                       |
             +------------>----------+

Full Mesh:
[Node A] <--> [Node B] <--> [Node C] <--> [Node D] <--> [Node E]
   ^                                                   |
   +---------------------------------------------------+

⚖️ Ưu điểm & Nhược điểm của phương pháp thủ công

Ưu điểmNhược điểm
Chủ động kiểm soátTốn công sức khi số lượng node lớn
Không phụ thuộc script ngoàiDễ sai sót nếu thiếu node
Hiểu sâu về cơ chế hoạt độngCó thể gây lỗi nếu sửa sai file /etc/pve/...

🧠 Lời khuyên quản trị viên

  • Không xóa ~/.ssh/ khi dùng Ansible hoặc bất kỳ tool tự động hóa nào – hãy backup trước!
  • Thiết lập full-mesh SSH trust trong PVE cluster là bắt buộc.
  • Với Ceph, xác thực nội bộ không dùng SSH, nhưng bạn nên đảm bảo SSH vẫn hoạt động nếu cần quản lý tự động.
  • Thường xuyên kiểm tra: pvecm status ceph -s

✅ Kết luận

Việc vô tình xóa ~/.ssh/ có thể tưởng chừng vô hại, nhưng với PVE Cluster thì lại ảnh hưởng lớn đến khả năng giao tiếp giữa các node. Việc hiểu được cơ chế xác thực nội bộ của PVE và Ceph sẽ giúp bạn xử lý các sự cố nhanh chóng và chính xác hơn.

Hy vọng bài viết này sẽ giúp ích cho các sysadmin đang sử dụng cluster Proxmox + Ceph trong môi trường production hoặc lab. Nếu bạn cần script tự động hóa quá trình thiết lập SSH trust cho nhiều node, hãy để lại bình luận – mình sẽ chia sẻ thêm!

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email