# Cho AI dựng lab network: Claude Code + Proxmox, tập 1

[Kai Nguyễn](https://homus.dev/speakers/kai-nguyen) · [Kai Networks](https://homus.dev/orgs/kai-networks)

> Chuẩn bị môi trường để Claude Code dựng lab network trên Proxmox: máy jump, VS Code Remote SSH, agent.md, inventory.md và SSH bằng key.

Topics: Coding Agents, Workflow, Context Engineering

Canonical: https://homus.dev/talks/thu-cho-ai-tu-dung-lab-network-claude-code-proxmox-tap-1

## 1. Vì sao thử dùng AI để dựng lab network

Kai Nguyễn mở đầu bằng một nhận xét: ai cũng biết trào lưu AI lúc anh làm video (đăng ngày 25/10/2026): đi đâu cũng nghe nói tới AI, AI agent, agent đủ kiểu. Vậy nếu đem AI và AI agent vào việc học tập của chính mình thì sao?

Thật ra anh đang làm Splunk, và theo lời anh trong video đăng ngày 25/10/2026, AI giúp anh rất nhiều trong việc dựng lab Splunk: nó cực kỳ nhanh, và anh có thể build những use case mà nói thật, nếu không có AI thì anh cũng không biết build thế nào, hoặc sẽ rất vất vả. Lý do là với Splunk, anh vừa phải dựng cả Windows Server lẫn Linux server, rồi các thành phần của Splunk, rồi phải dùng Kali Linux để demo tấn công cho có log, đủ thứ hết. Anh gác chuyện đó lại vì đó là một câu chuyện khác; có dịp anh sẽ chia sẻ thêm cách anh dùng AI để dựng lab Splunk.

Còn ở đây, Kai muốn làm một series, dù chưa biết có thành series được hay không: áp dụng cách làm tương tự, đem AI vào việc xây dựng lab bên network. Anh nói thẳng là anh cũng chưa làm thử, nên chưa biết thành công hay thất bại; cứ làm thôi, hy vọng là sẽ thành công và đủ nội dung cho cả một series. Rồi anh bắt tay vào tập 1 (video đăng ngày 25/10/2026) để xem mọi thứ diễn ra thế nào.

## 2. Mô hình: Proxmox, máy jump và Claude

Trước khi làm, Kai chia sẻ mô hình của mình. Anh có một con server vật lý, và trên server đó anh chạy ảo hóa bằng Proxmox (Proxmox VE).

Theo cách anh giải thích trong video đăng ngày 25/10/2026, Proxmox hơi khác VMware một chút. Với VMware, bạn cài thẳng lên phần cứng. Còn Proxmox về bản chất là một máy Linux, sau đó mới cài Proxmox lên để ảo hóa, nên nó gần gần giống một Type 2 hypervisor. Người ta hay nói Proxmox là "Type 1.5 hypervisor". Anh nói chỉ muốn người xem hình dung như vậy thôi: có một máy Proxmox, và máy đó chạy ảo hóa.

Trong số nhiều máy ảo trên Proxmox, Kai có thêm một máy ảo Linux mà anh gọi là máy jump. Anh sẽ remote vào máy jump này và cài AI lên đó; với anh, AI đó là Claude. Sau đó anh viết cho Claude một vài chỉ dẫn, rồi bảo nó dựng lab này, lab kia cho mình. Ý tưởng của cả series, theo video đăng ngày 25/10/2026, là như vậy.

![Sơ đồ Kai Networks: máy của bạn SSH vào Jump Host, một Linux VM nằm cạnh VM 1, VM 2, VM 3 trên Proxmox VE chạy trên server vật lý](https://homus.dev/photos/zqgy1a2NSqU-0203.jpg)

Bên trái là "Máy của bạn" chạy lệnh SSH vào máy jump và báo "[OK] Đã kết nối". Trong khung "Server vật lý", Jump Host là một Linux VM nằm cạnh VM 1, VM 2, VM 3 (máy ảo trong lab), tất cả chạy trên lớp Proxmox VE (ảo hóa, hypervisor) và phần cứng CPU, RAM, SSD.

## 3. Visual Studio Code và extension Remote - SSH

Công cụ Kai dùng để bắt đầu là Visual Studio Code. Anh nói rõ là trong series này không có dev, không có code gì hết. Vậy dùng Visual Studio Code để làm gì? Nó có một extension tên là **Remote - SSH**.

Anh giải thích: với Linux, chủ yếu bạn remote vào bằng SSH và làm việc bằng dòng lệnh. Theo anh (video đăng ngày 25/10/2026), extension Remote - SSH trên Visual Studio Code giúp bạn vừa SSH vào máy Linux, vừa duyệt file trên chính máy Linux đó: xem file, chỉnh sửa file ngay trên máy đó luôn.

![Trang extension Remote - SSH của Microsoft trong Visual Studio Code](https://homus.dev/photos/zqgy1a2NSqU-0343.jpg)

Trang extension Remote - SSH của Microsoft trong Visual Studio Code, với mô tả "Open any folder on a remote machine using SSH and take advantage of VS Code's full feature set". Cột bên trái liệt kê các extension đã cài, trong đó có Claude Code for VS Code của Anthropic (theo màn hình trong video đăng ngày 25/10/2026).

Đến đây Kai đã có sẵn máy jump, đã có Visual Studio Code và đã cài extension Remote - SSH. Anh nói phần cài này khá đơn giản, người xem tự làm được, nên anh bỏ qua (video đăng ngày 25/10/2026).

## 4. Lỗi host key khi SSH và cách xử lý

Giờ Kai Remote SSH vào máy jump. Remote SSH trong Visual Studio Code có lệnh Connect to Host; anh gõ `192.168.130.7`, IP của máy jump, rồi Enter. Ngay lập tức nó báo lỗi về remote host key: host key đã thay đổi (demo trong video đăng ngày 25/10/2026). Anh đóng cửa sổ remote đó lại trước.

Để xử lý, anh mở terminal trên MacBook của mình và SSH thẳng vào máy jump trước đã, với user của anh, tới máy 130.7. Terminal cũng báo host key đã thay đổi: cảnh báo trên màn hình ghi "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!", nghĩa là host key đang lưu cho máy này không còn đúng nữa. Anh dùng `vi` mở file `known_hosts` trong thư mục `.ssh` của user trên máy Mac, tìm tới các dòng của "130.7", rồi xóa mấy key cũ đó đi (demo trong video đăng ngày 25/10/2026).

Thứ tự Kai xử lý lỗi host key trong video đăng ngày 25/10/2026: lỗi trong VS Code, kiểm tra bằng SSH từ terminal, xóa key cũ trong `known_hosts`, SSH lại thành công, rồi mới kết nối lại từ VS Code.

## 5. Một lưu ý: đây là hành trình, không phải hướng dẫn

Giữa lúc sửa lỗi host key, Kai dừng lại để lưu ý người xem. Mục tiêu của anh không phải là hướng dẫn từng bước để người xem làm theo, mà chỉ là chia sẻ hành trình dùng AI để dựng lab network như thế nào. Phương pháp anh làm có thể chưa tối ưu, và có thể người xem có những phương pháp hay hơn.

Rồi anh quay lại việc đang làm. Anh đã xóa host key cũ của máy 130.7, máy jump của anh, và SSH lại thử. Lần này SSH vào được. Màn hình hiện lời chào của Ubuntu và thông tin hệ thống của máy jump, gồm địa chỉ IPv4 192.168.130.7 (demo trong video đăng ngày 25/10/2026).

## 6. Vào máy jump trong VS Code, tạo thư mục network-lab

Khi đã SSH được từ terminal, Kai quay lại dùng Remote SSH trên Visual Studio Code: Connect to Host, 130.7. VS Code báo "Setting up", có vẻ lần này làm được rồi. Nó yêu cầu nhập mật khẩu, anh nhập vào, rồi đến "Opening remote". Anh nói có vẻ ổn rồi, sẽ vào được thôi, và đúng là đã vào được (demo trong video đăng ngày 25/10/2026).

Tiếp theo anh chọn Open và mở thư mục home của user anh trên máy jump. Cửa sổ VS Code cũ không dùng nữa nên anh đóng đi. VS Code lại hỏi mật khẩu, anh nhập lại, rồi bấm **Trust and continue**. Như vậy anh đã SSH thành công vào máy jump từ VS Code (demo trong video đăng ngày 25/10/2026).

Lúc đó cột bên trái chính là các thư mục trên máy jump, trong thư mục home của anh. Ở đó có thư mục `kali-install` và `splunk-lab`; đó là phần anh dùng AI hỗ trợ cho lab Splunk, chuyện để bàn sau. Anh mở terminal ra (View, rồi Terminal). Terminal ở phía dưới này cũng chính là terminal của máy jump (theo màn hình trong video đăng ngày 25/10/2026). Anh phóng chữ to lên một chút cho dễ nhìn.

![VS Code đã kết nối SSH tới máy 192.168.130.7, cột Explorer có thư mục kali-install và splunk-lab, terminal bash ở dưới](https://homus.dev/photos/zqgy1a2NSqU-0643.jpg)

VS Code đã kết nối Remote SSH tới máy jump 192.168.130.7: cột Explorer hiện các thư mục trong home, trong đó có `kali-install` và `splunk-lab`; terminal bash ở dưới chạy trên chính máy jump (màn hình trong video đăng ngày 25/10/2026).

Tiếp đó anh tạo một thư mục mới bằng New Folder, đặt tên là `network-lab`, rồi trong terminal `cd` vào thư mục `network-lab` đó. Vậy là anh đã có máy jump và đã SSH vào được nó.

## 7. Cài Claude Code trên Linux

Bước tiếp theo là cài một AI lên máy jump. Kai kể rằng với lab Splunk, công ty cấp cho anh một công cụ AI khác. Với network lab này anh lại không muốn dùng công cụ đó mà dùng thứ thân thuộc hơn với anh: Claude. Anh nói (video đăng ngày 25/10/2026) anh dùng Claude rất nhiều, cho cả việc cá nhân lẫn Kai Networks, cho rất nhiều thứ; chỉ ở công ty là anh dùng công cụ khác thôi.

Để cài Claude, anh vào trang chủ Claude, mục Download, kéo xuống và chọn bản Claude Code chạy trong terminal, bấm Install. Trang tài liệu Claude Code mở ra, anh kéo xuống tìm phần cho Linux (mục "macOS, Linux, WSL"). Anh nói rất đơn giản: trang chỉ sao thì mình làm vậy (video đăng ngày 25/10/2026).

![Trang Overview của Claude Code Docs, tab Terminal, mục Native Install với lệnh cho macOS, Linux, WSL](https://homus.dev/photos/zqgy1a2NSqU-0743.jpg)

Trang Overview của Claude Code Docs mà Kai mở trong video đăng ngày 25/10/2026: tab Terminal, mục "Native Install (Recommended)", với lệnh cài cho "macOS, Linux, WSL" và một lệnh khác cho Windows PowerShell.

Anh copy lệnh cài, mở sang terminal của máy jump, dán vào và chạy, rồi chỉ việc chờ. Lệnh anh chạy trên màn hình là:

```
curl -fsSL https://claude.ai/install.sh | bash
```

Màn hình chạy qua "Setting up Claude Code...", rồi báo "Claude Code successfully installed!", kèm phiên bản 2.1.303, vị trí `~/.local/bin/claude` và gợi ý "Next: Run claude --help to get started", cuối cùng là "Installation complete!" (demo trong video đăng ngày 25/10/2026).

![Terminal trên máy jump báo Claude Code successfully installed, Version 2.1.303](https://homus.dev/photos/zqgy1a2NSqU-0814.jpg)

Kết quả cài trên máy jump trong video đăng ngày 25/10/2026: terminal báo "Claude Code successfully installed!", Version 2.1.303, Location `~/.local/bin/claude`, rồi "Installation complete!". Thư mục `network-lab` vừa tạo đã hiện trong cột Explorer.

Anh xem lại trang chủ còn hướng dẫn gì thêm không: chỉ còn bước `cd` vào thư mục project và chạy lệnh `claude`. Anh đã `cd` vào thư mục `network-lab` rồi, nên giờ chỉ cần chạy Claude (demo trong video đăng ngày 25/10/2026).

## 8. Đăng nhập và chọn model

Kai gõ lệnh `claude`, và anh nói chỉ đơn giản vậy là xong. Anh chọn giao diện dark mode. Sau đó Claude Code yêu cầu đăng nhập; anh chọn cách đăng nhập bằng tài khoản Claude có subscription. Claude Code đưa ra một đường link, anh copy nguyên đường link đó, mở trên trình duyệt và đăng nhập bằng tài khoản Google. Anh giải thích bước này thật ra chỉ là dùng tài khoản Claude của mình để đăng nhập, không có gì phức tạp. Trang web yêu cầu Authorize, anh bấm Authorize, rồi trang báo có thể đóng cửa sổ. Anh nói: "ủa, vậy là xong à?" (demo trong video đăng ngày 25/10/2026).

Quay lại terminal, màn hình ghi "Login successful. Press Enter to continue". Anh Enter, Enter thêm lần nữa, chọn dùng các thiết lập được đề xuất, rồi chọn Yes ở bước hỏi về thư mục làm việc. Vậy là anh đã setup xong AI này, đã có Claude Code trên máy jump (demo trong video đăng ngày 25/10/2026).

![Claude Code v2.1.303 trên máy jump, dòng Opus 5.5 · Claude Max, thông báo auto mode là chế độ quyền mặc định](https://homus.dev/photos/zqgy1a2NSqU-1003.jpg)

Claude Code khởi động trong `~/network-lab` trên máy jump (video đăng ngày 25/10/2026): màn hình ghi "Claude Code v2.1.303", "Opus 5.5 · Claude Max", và thông báo "Auto mode is now Claude Code's default permission mode", giải thích auto mode để Claude tự xử lý các lời hỏi quyền: kiểm tra từng tool call để tìm hành động rủi ro và prompt injection trước khi chạy, chạy những tool call nó đánh giá là ít rủi ro hơn và chặn phần còn lại. Ở trên, file `agent.md` mới tạo còn trống.

Model đang chọn là Opus 5.5, và Kai quyết định dùng luôn model này. Lý do anh đưa ra trong video đăng ngày 25/10/2026: anh nghĩ lab sẽ khá phức tạp, dùng Sonnet thì sợ không đủ. Gói anh đang dùng là Claude Max, nên về token anh cũng không quan tâm lắm.

## 9. Viết file agent.md

Tiếp theo, Kai cần một vài chỉ dẫn cho Claude. Anh mở thư mục `network-lab`, thêm một file mới và đặt tên là `agent.md`. File này sẽ chứa những hướng dẫn chung: mục đích của dự án là gì, và một số quy tắc của dự án (theo video đăng ngày 25/10/2026).

Anh chỉ ra cái lợi của VS Code ở bước này: nếu dùng Linux bình thường, SSH vào rồi bạn phải dùng `nano` hoặc `vi` để sửa file `agent.md`, đúng không? Theo Kai (video đăng ngày 25/10/2026), với Visual Studio Code, bạn chỉ cần click vào đây, nó mở file `agent.md` ra và bạn sửa trực tiếp trên đó luôn.

Nội dung anh gõ vào `agent.md`, theo lời anh đọc trong lúc gõ: phần tổng quan ghi dự án này để build homelab. Rồi các máy, anh dùng gạch đầu dòng cho rõ ràng: các máy là VM chạy trên Proxmox. Anh ghi thêm: homelab của anh sẽ là network lab, bao gồm EVE-NG (anh nói ai biết sau này mình dùng cái gì), wireless, firewall, và vân vân. Tạm thời cứ như vậy; sau này nếu có thay đổi thì anh cập nhật trong file này. Cuối cùng anh ghi rằng danh sách các máy sẽ nằm trong file `inventory.md`.

Những gì Kai đọc trong lúc gõ `agent.md` ở video đăng ngày 25/10/2026: mục đích dự án và cấu trúc lab, còn danh sách máy thì trỏ sang một file riêng là `inventory.md`.

## 10. Viết inventory.md và giới hạn phạm vi của AI

Kai dự định có thêm file `inventory.md`, nơi lưu danh sách các máy ảo của anh, IP, rồi user của từng máy chẳng hạn; anh nói sẽ lưu hết trong đó. Anh tạo file `inventory.md` và ghi máy Proxmox vào trước. Đến IP của máy Proxmox, anh nói cho người xem biết luôn cũng chả sao. Rồi tới phần SSH: anh định ghi "remote connection" nhưng đổi lại ghi SSH, port 22, username SSH là `root`, và SSH dùng key. Nội dung file trên màn hình (xem ảnh ở mục 11) là:

```
# Proxmox
- IP : 192.168.130.254
- SSH port 22
- username : root
- SSH dùng key
```

Anh tạm lưu file `inventory.md` lại, rồi thêm cho agent một quy tắc nữa: chỉ tác động đến các máy trong file `inventory.md`, không tác động đến các máy khác, trừ khi được yêu cầu (video đăng ngày 25/10/2026).

Lý do Kai đưa ra: trên server của anh, ngoài lab network và lab Splunk, còn có những máy phục vụ cho công việc của anh nữa. Vì vậy anh phải thêm quy tắc này cho chắc ăn; lỡ AI đụng tới máy server của Kai Networks thì cũng mệt.

Quy tắc phạm vi Kai viết cho Claude trong video đăng ngày 25/10/2026: chỉ làm trên các máy có trong `inventory.md`; các máy khác trên cùng server thì không đụng tới, trừ khi được yêu cầu.

## 11. Nhờ Claude hướng dẫn cấu hình SSH bằng key

Vì `inventory.md` ghi "SSH dùng key", giờ Kai nhờ Claude hướng dẫn cấu hình SSH bằng key. Anh gõ cho Claude rằng anh có máy Proxmox, muốn SSH vào máy này bằng key, và anh vẫn đang SSH được bằng username và password, và nhờ Claude hướng dẫn. Anh giải thích anh có background network, mấy việc này anh không chuyên lắm, nên thôi hỏi AI xem nó hướng dẫn được tới đâu (video đăng ngày 25/10/2026).

Claude trả lời, và Kai đọc qua câu trả lời trên màn hình. Câu trả lời bắt đầu bằng "Theo inventory.md, máy Proxmox của bạn là root@192.168.130.254". Kai nói: nó tự hiểu luôn. Claude viết tiếp rằng trên máy jump đã có sẵn key `~/.ssh/id_ed25519_agent`, các VM khác cũng đang dùng key này, nên không cần tạo key mới (demo trong video đăng ngày 25/10/2026).

![inventory.md với IP 192.168.130.254, SSH port 22, username root, SSH dùng key; terminal Claude Code hướng dẫn chép public key lên Proxmox](https://homus.dev/photos/zqgy1a2NSqU-1343.jpg)

Phía trên là file `inventory.md` của Kai. Phía dưới, phiên Claude Code tên "SSH key cho máy Proxmox" trả lời (video đăng ngày 25/10/2026): bước 1 chép public key lên Proxmox (sẽ hỏi mật khẩu root một lần), một lưu ý riêng với Proxmox về file `authorized_keys`, cách làm thủ công nếu không dùng được `ssh-copy-id`, và bước 2 thêm alias vào `~/.ssh/config`.

Chi tiết các bước Claude đưa ra trên màn hình (video đăng ngày 25/10/2026):

- Bước 1, chép public key lên Proxmox, sẽ hỏi mật khẩu root một lần, bằng lệnh `ssh-copy-id` bên dưới. Claude gợi ý có thể gõ lệnh này với dấu `!` ở đầu ngay trong prompt của Claude Code để chạy và nhập mật khẩu (theo màn hình trong video đăng ngày 25/10/2026).

- Lưu ý riêng với Proxmox mà Claude viết trong video đăng ngày 25/10/2026: `/root/.ssh/authorized_keys` là symlink tới `/etc/pve/priv/authorized_keys`, file này được đồng bộ trong cluster; `ssh-copy-id` chỉ ghi thêm vào file nên vẫn an toàn; nếu thêm key bằng tay thì dùng `>>` vào đúng file đó, đừng xóa hay ghi đè symlink.

- Nếu không dùng được `ssh-copy-id`, Claude đưa cách thủ công: đọc file public key rồi đẩy qua SSH, ghi thêm vào `/etc/pve/priv/authorized_keys` (theo màn hình trong video đăng ngày 25/10/2026).

- Bước 2, thêm alias vào `~/.ssh/config`, "cùng kiểu với các máy khác", với một block `Host proxmox pve 192.168.130.254` trỏ tới user `root` và key `id_ed25519_agent` (theo màn hình trong video đăng ngày 25/10/2026).

```
ssh-copy-id -i ~/.ssh/id_ed25519_agent.pub root@192.168.130.254
```

Phần sau của câu trả lời có thêm bước 3, kiểm tra bằng `ssh proxmox 'hostname; pveversion'`: nếu lệnh chạy mà không hỏi mật khẩu thì đã xong. Bước 4 được Claude ghi là tùy chọn: tắt đăng nhập bằng mật khẩu, và chỉ làm sau khi đã chắc chắn vào được bằng key, bằng cách sửa `/etc/ssh/sshd_config` trên Proxmox (`PermitRootLogin prohibit-password`, `PasswordAuthentication no`) rồi chạy `systemctl reload ssh`. Claude cũng ghi rằng khi tắt mật khẩu, bạn vẫn vào được qua console trên giao diện web ở cổng 8006, nhưng alias `proxmox-pass` sẽ không dùng được nữa; các máy khác trong lab đang để vẫn bật mật khẩu, nên bước này là tùy bạn. Cuối cùng Claude hỏi có muốn nó thêm sẵn block config ở bước 2 vào `~/.ssh/config` không (demo trong video đăng ngày 25/10/2026).

![Claude Code hiện bước 3 kiểm tra và bước 4 tùy chọn tắt đăng nhập bằng mật khẩu; lệnh ssh-copy-id đang chạy qua dấu chấm than](https://homus.dev/photos/zqgy1a2NSqU-1403.jpg)

Phần cuối câu trả lời (video đăng ngày 25/10/2026): bước 3 "Kiểm tra" và bước 4 "Tuỳ chọn: tắt đăng nhập bằng mật khẩu". Ở dưới, Kai đã chạy `! ssh-copy-id -i ~/.ssh/id_ed25519_agent.pub root@192.168.130.254` ngay trong prompt của Claude Code, lệnh đang ở trạng thái "Running…".

Kai copy lệnh đó và dán ngay vào ô prompt của Claude Code trên terminal của anh rồi chạy. Kết quả không như mong đợi: Kai đọc thông báo rằng lệnh bị từ chối ba lần liên tiếp, có khả năng không phải do sai mật khẩu, kèm lỗi "Permission denied". Anh nói nó bảo mình nhập lệnh này vào mà lại báo lỗi quá trời (demo trong video đăng ngày 25/10/2026).

## 12. Hai lần nhầm tài khoản, và lỗi thật nằm ở đâu

Kai cho rằng hình như mình nhầm: anh SSH vào máy này bằng tài khoản cá nhân của anh chứ không phải tài khoản `root`. Anh gõ cho Claude một lời xin lỗi, nói anh SSH bằng tài khoản cá nhân. Claude trả lời là không sao, và hướng dẫn lại: với user thường thì đơn giản hơn, key nằm trong `.ssh/authorized_keys` trong thư mục home của user đó như một máy Linux bình thường, không dính tới symlink `/etc/pve` của root. Bước chép key lần này được ghi rõ là chạy trong terminal thường, không dùng `!`. Claude cũng giải thích lần trước bị lỗi một phần vì gõ `!` trong prompt, nơi không có terminal tương tác nên không nhập được mật khẩu (demo trong video đăng ngày 25/10/2026).

Kai mở một terminal khác, `cd` vào thư mục `network-lab`, rồi chạy lệnh Claude đưa (bản dùng user cá nhân của anh). Nhập mật khẩu vào, kết quả vẫn là "Permission denied" (demo trong video đăng ngày 25/10/2026).

Anh mở terminal để kiểm tra lại: anh quên mất mình SSH vào máy Proxmox bằng tài khoản gì. Anh SSH vào máy 130.254 xem có phải `root` không, và hóa ra đúng là tài khoản `root`. Anh nói mình lại nhầm nữa rồi, và gõ cho Claude: "xin lỗi lần nữa, tôi ssh vào proxmox bằng tài khnoả root" (demo trong video đăng ngày 25/10/2026).

![Claude Code trả lời: dùng root, inventory.md ghi đúng, lỗi lần trước do chạy bằng dấu chấm than trong prompt không có terminal tương tác](https://homus.dev/photos/zqgy1a2NSqU-1603.jpg)

Câu trả lời của Claude sau lần xin lỗi thứ hai (video đăng ngày 25/10/2026): dùng `root`, `inventory.md` đang ghi đúng; lỗi lần trước là do chạy bằng `!` trong prompt, chỗ đó không có terminal tương tác nên không nhập được mật khẩu, chứ không phải sai tài khoản. Bên dưới là bước 1 "Chép key (mở một terminal thường, không chạy qua !)" và một "Cách khác" qua Shell trên web UI.

Kai đọc câu trả lời trên màn hình: vậy thì dùng `root` như hướng dẫn lúc trước, `inventory.md` đang ghi đúng rồi. Lần trước lệnh lỗi vì chạy bằng `!` trong prompt này, chỗ đó không có terminal tương tác, chứ không phải do tài khoản. Claude đưa lại bước chép key, lần này ghi rõ "mở một terminal thường, không chạy qua !", và thêm một cách khác: nếu vẫn bị Permission denied, có thể Proxmox đang chặn root đăng nhập bằng mật khẩu; khi đó vào web UI của Proxmox ở cổng 8006, chọn node rồi mở Shell và ghi nội dung public key vào `/etc/pve/priv/authorized_keys` (demo trong video đăng ngày 25/10/2026).

## 13. Chép key thành công, kiểm tra và thêm alias

Kai sao chép lại lệnh, mở lại terminal, `cd` vào `network-lab` và chạy lại lệnh `ssh-copy-id` với tài khoản `root`. Enter, nhập lại mật khẩu, và lần này add key thành công (demo trong video đăng ngày 25/10/2026).

Sau đó anh quay lại Claude Code để lấy lệnh kiểm tra ở bước 2: nếu lệnh trả về hostname mà không hỏi mật khẩu là xong. Lệnh trên màn hình (video đăng ngày 25/10/2026) là:

```
ssh -i ~/.ssh/id_ed25519_agent -o IdentitiesOnly=yes root@192.168.130.254 hostname
```

![Claude Code hiện bước Kiểm tra với lệnh ssh -i id_ed25519_agent -o IdentitiesOnly=yes root@192.168.130.254 hostname được bôi chọn](https://homus.dev/photos/zqgy1a2NSqU-1643.jpg)

Kai bôi chọn lệnh kiểm tra ở mục "2. Kiểm tra" trong câu trả lời của Claude (video đăng ngày 25/10/2026); dòng dưới ghi "Nếu lệnh trả về hostname mà không hỏi mật khẩu là xong."

Anh chạy lệnh kiểm tra và nói đã thành công: giờ anh có thể SSH vào máy Proxmox bằng key từ máy jump (demo trong video đăng ngày 25/10/2026). Anh đọc tiếp phần cuối hướng dẫn của Claude: dùng block config ở câu trả lời ban đầu (User root), chép key xong thì báo cho Claude, Claude sẽ kiểm tra kết nối và thêm alias `proxmox` / `proxmox-pass` vào `~/.ssh/config`.

Anh gõ: "tôi đã chép key xong và đã thử ssh thành công". Claude chạy một lệnh shell rồi trả lời là đã xong, nó đã thêm hai alias vào `~/.ssh/config`: `ssh proxmox` (hoặc `ssh pve`) để đăng nhập root bằng key `id_ed25519_agent`, và `ssh proxmox-pass` để đăng nhập bằng mật khẩu, làm dự phòng. Claude cũng báo nó đã thử `ssh proxmox` và đăng nhập được bằng key, không hỏi mật khẩu; máy trả về hostname `proxmox`, phiên bản `pve-manager/9.2.2` (demo trong video đăng ngày 25/10/2026).

![Claude Code báo đã thêm hai alias ssh proxmox và ssh proxmox-pass vào ~/.ssh/config, thử ssh proxmox thành công, pve-manager/9.2.2](https://homus.dev/photos/zqgy1a2NSqU-1723.jpg)

Câu trả lời cuối của Claude trong phần SSH (video đăng ngày 25/10/2026): hai alias `ssh proxmox` (đăng nhập root bằng key) và `ssh proxmox-pass` (đăng nhập bằng mật khẩu, để dự phòng); kết nối thử trả về hostname `proxmox`, phiên bản `pve-manager/9.2.2`. Claude nhắc lại có thể tắt đăng nhập root bằng mật khẩu như bước 4 nếu muốn chắc hơn, khi đó alias `proxmox-pass` sẽ không dùng được nữa.

Kai nói thêm về bước này: anh có hơi "làm màu" một chút. Bạn hoàn toàn có thể bảo Claude SSH vào máy Proxmox hoặc các máy ảo khác bằng username và mật khẩu, nhưng anh không muốn để mật khẩu, anh muốn SSH bằng key, nên mới làm bước này thôi (video đăng ngày 25/10/2026).

## 14. Hỏi Claude về image và khả năng tự dựng VM

Cuối cùng Kai hỏi Claude thêm hai câu: bạn có thể xem các image, các file image có sẵn trên Proxmox không, và bạn có thể tự dựng VM không? (demo trong video đăng ngày 25/10/2026)

Claude trả lời: xem được, và nó cũng dựng VM được. Theo Claude, Proxmox của anh đang có Windows Server, một bản Windows Server cũ, cả image C9800-CL, image của Cisco, EVE, Ubuntu và Red Hat; còn container thì lúc đó không có. Kai giải thích đây là những máy ảo anh đang dựng trên Proxmox của mình. Về việc tự dựng VM, Claude trả lời là nó tạo được VM (demo trong video đăng ngày 25/10/2026).

Hai câu hỏi cuối tập và câu trả lời của Claude về những gì đang có trên Proxmox của Kai (demo trong video đăng ngày 25/10/2026).

## 15. Tổng kết tập 1

Kai tóm lại: về cơ bản tập 1 là tạo môi trường trước đã. Anh có Proxmox, có một máy jump, và trên máy jump anh cài Claude Code (bản CLI). Mọi thứ anh sẽ tương tác thông qua máy jump này: anh lên máy jump, bảo Claude, AI của anh, làm việc này việc kia, dựng máy ảo. Anh nói cũng chưa biết nó sẽ làm được gì thêm (video đăng ngày 25/10/2026).

Môi trường Kai dựng xong trong tập 1 (video đăng ngày 25/10/2026): làm việc từ VS Code qua Remote SSH vào máy jump, Claude Code chạy trên máy jump với `agent.md` và `inventory.md`, và từ máy jump SSH bằng key vào Proxmox, nơi chạy các VM của lab.

Anh cảm ơn người xem.

## Nguồn và liên kết

- Tên gốc: Thử cho AI tự dựng Lab Network: Claude Code + Proxmox (Tập 1)
- Sự kiện: [YouTube](https://homus.dev/events/youtube)
- Video gốc: [https://www.youtube.com/watch?v=zqgy1a2NSqU](https://www.youtube.com/watch?v=zqgy1a2NSqU)

- Kênh YouTube Kai Networks (Kai Nguyễn): [youtube.com/channel/UCxCoyK9iq2GoyNOH8o7QfHA](https://www.youtube.com/channel/UCxCoyK9iq2GoyNOH8o7QfHA)

- Claude Code Docs, trang Overview với lệnh cài cho macOS, Linux, WSL (đọc ngày 27/10/2026): [code.claude.com/docs/en/overview](https://code.claude.com/docs/en/overview)

- Claude Code Docs, trang Permission modes, có phần về auto mode (đọc ngày 27/10/2026): [code.claude.com/docs/en/permission-modes](https://code.claude.com/docs/en/permission-modes)

- Tài liệu Visual Studio Code về Remote Development using SSH (đọc ngày 27/10/2026): [code.visualstudio.com/docs/remote/ssh](https://code.visualstudio.com/docs/remote/ssh)

- Extension Remote - SSH trên Visual Studio Marketplace (đọc ngày 27/10/2026): [marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh)

- Proxmox VE wiki (đọc ngày 27/10/2026): [pve.proxmox.com/wiki/Main_Page](https://pve.proxmox.com/wiki/Main_Page)

Nguồn: https://homus.dev/talks/thu-cho-ai-tu-dung-lab-network-claude-code-proxmox-tap-1 · cập nhật 2026-10-27
