--- title: Cấu hình Crush để lấy key API từ keychain của hệ điều hành date: 2026-08-10 23:03:12.907055 UTC --- Crush là phần mềm agent AI ưa thích của mình, nhưng trước giờ mình vẫn có một băn khoăn về việc phải lưu key API của các nhà cung cấp mô hình LLM trong file cấu hình trần trụi. Từ phiên bản 0.85, Crush thay đổi cách lưu và đọc cấu hình, và mình đã thấy cơ hội để lưu key API một cách an toàn hơn. Trước đây mình có một bài viết "[Sử dụng model AI LLM host trong nước](https://quan.hoabinh.vn/post/2026/4/su-dung-model-ai-llm-host-trong-nuoc)" và bạn có thể thấy Crush lưu cấu hình trong một file JSON và ta phải để key API ở dạng nguyên văn trong đó, ví dụ: ```json { "providers": { "fpt-ai-factory": { "name": "FPT AI Factory", "base_url": "https://mkp-api.fptcloud.com", "api_key": "sk-key-cua-ban", } } ``` Cách lưu này khiến key API dễ dàng bị rò rỉ một cách vô tình, ví dụ bạn copy file, thư mục gửi cho người khác mà quên kiểm tra, bạn mở cuộc họp video, chia sẻ màn hình và vô tình mở file này lên ngay trong màn hình đang chia sẻ v.v... Thông thường, trên Linux có một loại phần mềm tên gọi chung là keyring, keystore, keychain là nơi lưu tập trung key và password. Các phần mềm khác cần dùng đến password, key API như chat, email, lịch sẽ không lưu password trong các file riêng của chúng mà lưu trong keyring, khi cần thì gọi keyring để lấy ra. Giả sử bạn có ổ cứng rời đã được khoá bằng mật khẩu, bạn muốn khi cắm ổ cứng rời vào máy mà máy của bạn tự động dùng mật khẩu (đã ghi nhớ) để mở khoá thì chương trình quản lý file trên Linux cũng làm được luôn và cũng gọi keyring để lưu và lấy mật khẩu. ![Password for unlocking HDD](https://quan-images.b-cdn.net/blogs/2026/08/GNOME%20Keyring.png) Ta cũng sẽ lưu các key API của nhà cung cấp LLM vào keyring và hướng dẫn Crush lấy chúng ra. Vì mình thường làm việc từ xa qua đường SSH nên mình sẽ không dùng [GNOME Keyring](https://wiki.archlinux.org/title/GNOME/Keyring) có sẵn (phù hợp hơn môi trường desktop) mà dùng phần mềm [`pass`](https://www.passwordstore.org/) cho đơn giản. Cài đặt `pass` rất đơn giản: ```console sudo apt install pass ``` `pass` sẽ cần dùng khoá GPG của bạn để mã hoá dữ liệu, nên trước khi dùng `pass`, hãy lấy ID của khoá GPG. Bạn hãy mở chương trình _Seahorse_ (còn hiển thị bằng tên "Passwords and Keys") lên, và tìm đến mục "GnuPG keys": ![GnuPG](https://quan-images.b-cdn.net/blogs/2026/08/Get%20your%20key%20ID.png) Chẳng hạn trong hình bên trên, ta có key ID là "A4EE 71F9 AE4A D559". Đây là thông của chìa khoá công khai nên bạn cứ vô tư chia sẻ. Dùng key ID này để khởi tạo kho lưu trữ của `pass`: ```console pass init A4EE71F9AE4AD559 ``` Ta sẽ đặt ra quy ước đặt tên lưu trữ, theo công thức "crush/". Ví dụ mình dùng mô hình LLM host tại [Neuralwatt](https://portal.neuralwatt.com/models) thì sẽ đặt tên lưu trữ là `crush/neuralwatt`. Lưu key API như sau: ```console pass insert crush/neuralwatt ``` Xem danh sách các key API đã lưu: ```console ❯ pass Password Store └── crush ├── moonshot ├── neuralwatt └── orca-router ``` Để lấy ra key API thì dùng lệnh `pass tên`: ```console ❯ pass crush/neuralwatt sk-key-cua-neuralwatt ``` Để hướng dẫn Crush lấy key từ `pass` thì ta phải chuyển Crush sang dùng format `crushrc` trước, nếu nó đang dùng format JSON. Sau đó mở file *~/.config/crush/crushrc*, tìm đến dòng config của provider: ```sh provider add neuralwatt \ --name "Neuralwatt" \ --type openai-compat \ --base-url "https://api.neuralwatt.com/v1" \ --api-key "sk-key-cua-neuralwatt" \ --discover-models true ``` Tại tham số `--api-key`, ta chèn cú pháp shell gọi lệnh `pass`, thành như sau: ```bash --api-key $(pass crush/neuralwatt) ``` Vậy đó, rồi lưu lại. Bây giờ mở Crush, chọn nhà cung cấp Neuralwatt và xem nó gọi model thành công không: ![Crush-call-neuralwatt](https://quan-images.b-cdn.net/blogs/2026/08/crush-verify-pass-work.gif)