---
title: เครื่องมือบรรทัดคำสั่ง cmp
description: ติดตั้งและใช้งาน cmp CLI ที่ให้บริการโดยแผงควบคุมของคุณ: เข้าสู่ระบบผ่านเบราว์เซอร์ด้วยรหัสใช้ครั้งเดียว, คำสั่งที่สร้างจาก API, ผลลัพธ์และรหัสออก, การใช้งาน CI และอัปเดตที่มีลายเซ็น.
url: https://nexcmp.com/th/docs/developers/cmp-cli/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

# เครื่องมือบรรทัดคำสั่ง `cmp` {#cmp-command-line-tool}

> **Where in the portal:** ชุดคำสั่งการติดตั้งจะอยู่บนคู่มือ API reference (`https://<your-domain>/apidoc`, ส่วน Command-line interface) การอนุมัติการเข้าสู่ระบบ: `https://<your-domain>/link` อุปกรณ์ที่เชื่อมต่อ: API keys (`/api-keys`) › Connected apps & devices.

## What it does {#what-it-does}

`cmp` คือโปรแกรมบรรทัดคำสั่งขนาดเล็กสำหรับลูกค้าของคุณ (และสำหรับคุณ) ที่เปลี่ยน**ทุกการทำงานของ API ให้เป็นคำสั่ง**: `cmp vm list`, `cmp vm start <id>`, `cmp billing invoice list`. โปรแกรมนี้สร้างขึ้นจากเอกสาร OpenAPI ของการติดตั้ง**ของคุณ** ณ เวลาที่ออก릴ีส ดังนั้นคำสั่งจึงตรงกับฟีเจอร์ที่คุณเปิดใช้งาน โดยเป็นไบนารีแบบสแตติกเดียวสำหรับ Linux, macOS และ Windows (amd64 และ arm64) โดยไม่ต้องติดตั้งสิ่งอื่นเพิ่ม.

## ข้อกำหนด {#requirements}

| Item | Requirement |
|---|---|
| Server | ไม่มีอะไรเพิ่มเติม แพ็กเกจรีลีสอยู่ภายในรีลีสของ NexCMP และให้บริการโดยแผงควบคุมที่ `https://<your-domain>/cli/`. |
| เครื่องของลูกค้า | Linux, macOS หรือ Windows (PowerShell 5.1+). จำเป็นต้องมี `ssh-keygen` (OpenSSH 8.0+) เฉพาะสำหรับการตรวจสอบลายเซ็นเท่านั้น. |
| ข้อมูลประจำตัว | เข้าสู่ระบบผ่านเบราว์เซอร์ด้วยรหัสใช้ครั้งเดียว หรือ [API key](https://nexcmp.com/th/docs/developers/api-keys/) |
| Network | HTTPS ไปยังพาเนลของคุณ CLI จะปฏิเสธการส่งคีย์ผ่าน `http://` ธรรมดา ยกเว้นไปยัง `localhost` |

## เตรียมโครงสร้างพื้นฐาน {#prepare-the-infrastructure}

ไม่มีเลย พาเนลจะให้บริการไฟล์เหล่านี้จาก `/cli/` (ไม่ต้องคอมไพล์หรืออัปโหลด):

| ไฟล์ | Purpose |
|---|---|
| `install.sh`, `install.ps1` | ตัวติดตั้งสำหรับ Linux/macOS และ Windows โดยจะระบุที่อยู่ของพาเนลของคุณ |
| `latest.json` | เวอร์ชันปัจจุบัน, รายการไฟล์, ขนาด, sha256 |
| `v<version>/cmp_<version>_<os>_<arch>.tar.gz` หรือ `.zip` | โปรแกรมสำหรับ: linux amd64/arm64, darwin amd64/arm64/universal, windows amd64/arm64 |
| `v<version>/SHA256SUMS`, `SHA256SUMS.sig` | ค่าตรวจสอบความถูกต้องและลายเซ็น ed25519 |
| `cmp-cli.pub` | คีย์สาธารณะสำหรับเผยแพร่ |

## การติดตั้ง (สำหรับลูกค้า) {#install-customer}

macOS และ Linux:

```bash
curl -fsSL https://cloud.example.com/cli/install.sh | sh
```

Windows PowerShell:

```powershell
irm https://cloud.example.com/cli/install.ps1 | iex
```

ตัวติดตั้งจะเลือกแพ็กเกจที่ตรงกับ OS และ CPU, ดาวน์โหลด `SHA256SUMS` และลายเซ็น, ตรวจสอบลายเซ็นด้วยคีย์ที่ฝังอยู่ในสคริปต์, ตรวจสอบแฮชของแพ็กเกจ และติดตั้ง `cmp` ลงใน `/usr/local/bin` (ในฐานะ root) หรือ `~/.local/bin`; สำหรับบน Windows จะติดตั้งลงใน `%LOCALAPPDATA%\cmp\bin` (เพิ่มลงใน `PATH` ของผู้ใช้) หากการตรวจสอบล้มเหลว จะไม่มีการติดตั้งใด ๆ

| ตัวแปร | ความหมาย |
|---|---|
| `CMP_VERSION` | ติดตั้งเวอร์ชันนี้แทนเวอร์ชันล่าสุด |
| `CMP_INSTALL_DIR` | โฟลเดอร์สำหรับติดตั้ง |
| `CMP_REQUIRE_SIGNATURE` | `1` = ยกเลิกเมื่อไม่สามารถตรวจสอบความถูกต้องของลายเซ็นได้ |
| `CMP_BASE_URL` | ฐานการดาวน์โหลด (สำหรับมิเรอร์) |

การดาวน์โหลดและตรวจสอบความถูกต้องด้วยตนเอง:

```bash
curl -fsSLO https://cloud.example.com/cli/latest.json
sha256sum --check --ignore-missing SHA256SUMS
```

![ส่วนอ้างอิง API พร้อมคำสั่งติดตั้ง cmp สำหรับ macOS และ Linux](https://nexcmp.com/th/docs/images/developers/cmp-cli-01-install.webp)

## เข้าสู่ระบบ {#log-in}

```bash
cmp login
```

1. CLI จะแสดง **รหัส** ใช้ครั้งเดียวและลิงก์ (`https://cloud.example.com/link?code=WDJB-MJHT`) จากนั้นจะเปิดเบราว์เซอร์และรอ
2. ในเบราว์เซอร์ ให้ลงชื่อเข้าใช้พอร์ทัล ตรวจสอบชื่อลูกค้า, อุปกรณ์, IP และประเทศ, ทำเครื่องหมายเลือกสิทธิ์ (scopes) และเลือกอายุของคีย์ (ค่าเริ่มต้น 90 วัน) สิทธิ์ที่มีค่าใช้จ่ายหรือลบข้อมูลจะถูกเว้นว่างไว้โดยค่าเริ่มต้น คลิกอนุมัติ
3. CLI จะได้รับ **คีย์ของตัวเอง** ซึ่งแยกต่างหากจากคีย์ที่ลูกค้าสร้างขึ้นเอง และจัดเก็บไว้ใน `~/.config/cmp/config.json` (โหมด `0600`; `%APPDATA%\cmp` บน Windows) คีย์นี้จะปรากฏภายใต้ **API keys › Connected apps & devices** และสามารถเพิกถอนได้ที่นั่น

รหัสจะหมดอายุหลังจาก 10 นาที การอนุมัติต้องใช้เซสชันพอร์ทัลที่เข้าสู่ระบบจริงและมีการยืนยันอีเมลแล้ว — ไม่ใช่คีย์อื่นและไม่ใช่เซสชันที่มีการสวมรอย

แฟล็กที่มีประโยชน์: `--scopes vm:read,billing:read`, `--name "build server"`, `--no-browser`, `--profile`, `--api-url`

สำหรับ CI หรือเซิร์ฟเวอร์ที่ไม่มีเบราว์เซอร์ ให้ใช้คีย์จากพอร์ทัล:

```bash
printf %s "$KEY" | cmp login --with-token
export CMP_TOKEN=vk_XXXX      # nothing is written to disk
cmp whoami
```

## การใช้งานคำสั่ง {#using-commands}

```text
cmp <group> [subgroup] <action> [<id> ...] [flags]
```

- พารามิเตอร์เส้นทางคืออาร์กิวเมนต์ตามตำแหน่ง ส่วนพารามิเตอร์คิวรีและฟิลด์ในบอดี้จะกลายเป็นแฟล็กแบบ kebab-case (`--start-port 443`)
- `--data '{"a":1}'`, `--data @file.json` หรือ `--data -` จะส่งบอดี้ JSON ทั้งชุด โดยแฟล็กจะทับฟิลด์เหล่านั้น
- `cmp help vm firewall add` (หรือ `--help`) แสดงรายละเอียดของคำสั่งใด ๆ

```bash
cmp catalog plans
cmp vm list --state active --per-page 50
cmp vm get 3f2a1c9e-0000-4000-8000-000000000000
cmp vm start 3f2a1c9e-0000-4000-8000-000000000000
cmp vm firewall add 3f2a1c9e-... --protocol tcp --start-port 22 --cidr-list 203.0.113.0/24
cmp billing wallet
cmp api GET /v1/vm --query page=2      # raw call to any endpoint
```

คำสั่งที่มีมาให้ในตัว: `login`, `logout`, `whoami`, `config`, `api`, `completion`, `version`, `update`, `help` นอกเหนือจากนี้ทั้งหมดมาจากเอกสาร API

แฟล็กส่วนกลาง:

| แฟล็ก | ความหมาย |
|---|---|
| `-o, --output json\|table\|yaml` | รูปแบบ ค่าเริ่มต้นคือ `table` บนเทอร์มินัลและ `json` เมื่อส่งออกผ่านไปป์ |
| `--profile`, `--api-url` | ข้อมูลการเข้าสู่ระบบที่บันทึกไว้และเว็บไซต์ที่ใช้งาน |
| `-y, --yes` | ข้ามการยืนยันสำหรับคำสั่งที่มีการทำลายล้างข้อมูลหรือมีค่าใช้จ่าย |
| `--idempotency-key <k>` | เลือกคีย์สำหรับคำสั่งที่มีค่าใช้จ่าย |
| `--retry <n>` | เมื่อเจอ HTTP 429 ให้รอ `Retry-After` และลองใหม่สูงสุด n ครั้ง |
| `--timeout <s>` | จำนวนวินาทีที่รอส่วนหัวการตอบกลับ (ค่าเริ่มต้น 60) |
| `--debug` | แสดงการรับส่งข้อมูล HTTP บน stderr โดยมีการซ่อนคีย์ไว้ |

คำสั่งที่**ตัดเงินในกระเป๋าเงินหรือลบข้อมูล**จะขอการยืนยัน และหากมีค่าใช้จ่าย ระบบจะส่ง `Idempotency-Key` ที่สร้างขึ้นโดยอัตโนมัติ (พิมพ์ออกทาง stderr เพื่อให้คุณลองใหม่ได้อย่างปลอดภัยด้วย `--idempotency-key`) หากไม่มีเทอร์มินัล ระบบจะปฏิเสธเว้นแต่จะระบุ `--yes`

### รหัสการออก (Exit codes) {#exit-codes}

| รหัส | ความหมาย |
|---|---|
| 0 | สำเร็จ |
| 1 | ข้อผิดพลาดอื่น (เครือข่าย, HTTP 4xx/5xx ที่ไม่ได้ระบุ) |
| 2 | ข้อผิดพลาดในการใช้งาน |
| 3 | ไม่ได้รับอนุญาต (401/403) |
| 4 | ไม่พบข้อมูล (404) |
| 5 | เกินขีดจำกัดอัตราคำขอ (429) |
| 6 | ต้องมีการยืนยันหรือถูกปฏิเสธ |
| 130 | ถูกขัดจังหวะ |

### โปรไฟล์และสภาพแวดล้อม {#profiles-and-environment}

`cmp config` แสดงรายการโปรไฟล์; `cmp config use <name>` สลับโปรไฟล์; ลูกค้าของผู้ให้บริการตัวแทนจำหน่ายใช้โดเมนของตนเอง: `cmp login --api-url https://shop.example.net --profile shop` ลำดับความสำคัญ: แฟล็ก, สภาพแวดล้อม, ไฟล์กำหนดค่า ตัวแปร: `CMP_TOKEN`, `CMP_PROFILE`, `CMP_API_URL`, `CMP_OUTPUT`, `CMP_CONFIG_DIR`, `CMP_ALLOW_HTTP`, `CMP_UPDATE_URL`

GitHub Actions:

```yaml
- name: Install cmp
  run: |
    curl -fsSL https://cloud.example.com/cli/install.sh | CMP_INSTALL_DIR="$RUNNER_TEMP/bin" sh
    echo "$RUNNER_TEMP/bin" >> "$GITHUB_PATH"
- name: List running VMs
  env:
    CMP_TOKEN: ${{ secrets.CMP_TOKEN }}   # a read-only key
  run: cmp vm list -o json | jq -r '.items[] | select(.cs_state=="Running") | .hostname'
```

การเติมคำสั่งในเชลล์: `cmp completion bash|zsh|fish|powershell`

## การอัปเดตและการถอนการติดตั้ง {#update-and-uninstall}

```bash
cmp version
cmp update --check
cmp update
```

`cmp update` จะดาวน์โหลด `latest.json`, `SHA256SUMS` และลายเซ็น ตรวจสอบความถูกต้องของลายเซ็นด้วยคีย์สาธารณะที่**ฝังอยู่ในไบนารีที่กำลังทำงาน** ตรวจสอบแฮชของแพ็กเกจ แล้วจึงแทนที่ตัวเอง การดาวน์เกรดต้องใช้ `--force` เมื่อคุณอัปเดต NexCMP พาเนลจะให้บริการรีลีส CLI ที่มาพร้อมกับเวอร์ชันใหม่

หากต้องการถอนการติดตั้ง ให้ลบไบนารี `cmp` และไดเรกทอรีการกำหนดค่า (`cmp config path` แสดงตำแหน่ง) เพิกถอนคีย์ภายใต้ **API keys** หากเครื่องสูญหาย

## ตรวจสอบ {#verify}

1. `cmp version` แสดงเวอร์ชันและเวอร์ชันเอกสาร API
2. `cmp login`,อนุมัติในเบราว์เซอร์ จากนั้น `cmp whoami` แสดงโปรไฟล์และ URL ของพาเนลของคุณ
3. `cmp vm list` แสดงรายการ VM ของคุณ; `cmp vm list -o json | jq .` แสดง JSON ดิบ

## ขีดจำกัดและหมายเหตุ {#limits-notes}

- รายการคำสั่งขึ้นอยู่กับบิวด์ของคุณ: แพ็กเกจถูกสร้างขึ้นจากเอกสาร OpenAPI ของการติดตั้งของคุณเมื่อสร้างรีลีส ดังนั้นผลิตภัณฑ์ที่ถูกปิดใช้งานในรีลีสของคุณจะไม่มีคำสั่ง ใช้ `cmp api` สำหรับเส้นทางที่ CLI ไม่รู้จัก
- CLI อยู่ภายใต้สัญญาอนุญาต MIT
- แต่ละแพ็กเกจลงนามด้วยคีย์ ed25519; คีย์ลายเซ็นจะถูกพินไว้ภายในตัวติดตั้งและไบนารี ไม่ได้ดึงข้อมูลในเวลาที่อัปเดต
- คีย์มีขีดจำกัดต่อคีย์และต่อบัญชี (ดู [REST API](https://nexcmp.com/th/docs/developers/api/#rate-limits))

## การแก้ Problme {#troubleshooting}

| อาการ | สาเหตุ | วิธีแก้ปัญหา |
|---|---|---|
| `curl .../cli/install.sh`คืนค่า 404 | รีลีสบนเซิร์ฟเวอร์ไม่มีโฟลเดอร์ CLI หรือโฮสต์ไม่อยู่ในไลเซนส์ | ตรวจสอบ `https://<domain>/cli/latest.json` และโดเมน; อัปเดต NexCMP |
| "ไม่สามารถตรวจสอบลายเซ็นได้" | `ssh-keygen` หายไปหรือเก่าเกินไป | ติดตั้ง OpenSSH 8.0+ หรือตั้งค่า `CMP_REQUIRE_SIGNATURE=0` เฉพาะเมื่อคุณยอมรับความเสี่ยงได้ |
| `cmp login` แจ้งว่าโค้ดหมดอายุแล้ว | ผ่านไป 10 นาทีแล้ว | เรียกใช้ `cmp login` อีกครั้ง |
| รหัสออก 3 | คีย์ไม่มีสโคป, หมดอายุ หรือถูกเพิกถอน | `cmp whoami`; สร้างหรืออนุมัติใหม่ด้วยสโคปที่มากขึ้น |
| รหัสออก 6 ในสคริปต์ | คำสั่งที่มีค่าใช้จ่ายหรือทำลายล้างโดยไม่มีเทอร์มินัล | เพิ่ม `--yes` (และ `--idempotency-key` ของคุณเอง) |
| "ปฏิเสธการส่งคีย์ผ่าน http" | URL API แบบ http ธรรมดา | ใช้ `https://` หรือใช้ `CMP_ALLOW_HTTP=1` เฉพาะสำหรับห้องทดลอง |
| เบราว์เซอร์เปิดเว็บไซต์ผิด | ไม่ได้ตั้งค่า `--api-url` สำหรับผู้ให้บริการตัวแทนจำหน่าย | `cmp login --api-url https://<reseller-domain>`. |


