# اجرای عامل‌ها روی سرور ابری

> **آخرین بازبینی**: 2026-10-20 · 📄 بر اساس qcode.cc و مستندات رسمی (tmux / OpenSSH / Ubuntu Server)

> ℹ️ صفحه پیکربندی و کنسول سرورهای ابری در حال حاضر **فقط به زبان‌های چینی و انگلیسی** ارائه می‌شوند. صفحه محصول: <https://qcode.cc/en/cloud>

اجرای Claude Code یا Codex روی ماشینی که **روشن می‌ماند**: کاری که نیم ساعت یا چند ساعت طول می‌کشد نباید با قطع اتصال SSH از بین برود، و باید بتوانید برگردید و آن را بررسی کنید. سرور ابری دقیقاً برای همین است. ابزارها را نصب کنید، کلید را تنظیم کنید، و سپس دو نکته اهمیت دارد: **زنده ماندن وظیفه پس از قطع نشست SSH**، و **جابه‌جایی به ورود مبتنی بر کلید**.

برای نحوه خرید ماشین به [سرورهای ابری: انتخاب، خرید و استفاده](/docs/getting-started/cloud-servers) مراجعه کنید؛ برای صورت‌حساب و بازپرداخت به [صورت‌حساب و قواعد سرور ابری](/docs/reference/cloud-billing) مراجعه کنید.

## نصب Claude Code / Codex روی سرور

صفحه سرور ابری دقیقاً همین دو فرمان را ارائه می‌دهد؛ آن‌ها را روی سرور اجرا کنید:

```bash
curl -fsSL https://qcode.cc/install/claude-code.sh | bash -s -- --lang en
```

```bash
curl -fsSL https://qcode.cc/install/codex.sh | bash -s -- --lang en
```

پیام‌های اسکریپت به انگلیسی هستند (`--lang` فقط `zh` و `en` را می‌پذیرد).

اسکریپت دامنه‌های دسترسی را از نظر کارایی می‌سنجد، کلید `cr_` شما را می‌پرسد، پیکربندی را می‌نویسد، در صورت نیاز Node.js و CLI را نصب می‌کند، و در پایان با ارسال یک درخواست حداقلی، اتصال را بررسی می‌کند. همه گزینه‌ها و مراحل بازگردانی در [اسکریپت راه‌اندازی با یک کلیک](/docs/getting-started/one-click-install) آمده است.

## تنظیم کلید QCode و نقطه پایانی

اسکریپت یک‌کلیکی از قبل پیکربندی را برای شما نوشته است. اگر می‌خواهید آن را دستی بنویسید — یا فقط می‌خواهید بررسی کنید چه نوشته است — این دو جا را باید ببینید، به نقل از [متغیرهای محیطی](/docs/getting-started/environment) و [شروع سریع Codex](/docs/getting-started/codex-quick-start):

**Claude Code** (پروتکل Anthropic):

```bash
export ANTHROPIC_BASE_URL="https://api.qcode.cc/api"
export ANTHROPIC_AUTH_TOKEN="cr_your_key"
```

**Codex** (پروتکل Responses در OpenAI) — ابتدا پوشه را ایجاد کنید، سپس `~/.codex/config.toml` را بنویسید:

```bash
mkdir -p ~/.codex
```

```toml
model_provider = "qcode"
model = "gpt-6.1-sol"
model_reasoning_effort = "high"

[model_providers.qcode]
name = "qcode"
base_url = "https://api.qcode.cc/openai"
wire_api = "responses"
requires_openai_auth = true
```

`~/.codex/auth.json`:

```json
{
  "OPENAI_API_KEY": "cr_your_key"
}
```

سپس بررسی کنید که `base_url` برابر `https://api.qcode.cc/openai` باشد، `ANTHROPIC_BASE_URL` برابر `https://api.qcode.cc/api` باشد، و کلید با `cr_` شروع شود. `export` دستی فقط روی شل فعلی اثر می‌گذارد؛ برای اینکه یک نشست tmux که از قبل در حال اجراست آن را دریافت کند، آن را داخل نشست tmux اجرا کنید یا در `~/.bashrc` قرار دهید.
## نگه‌داشتن وظایف پس از قطع SSH با tmux

اگر کار را روی یک `ssh root@<IP>` ساده اجرا کنید، فرایند پیش‌زمینه با قطع اتصال از بین می‌رود. نشست‌های tmux پایدار هستند — راهنما می‌گوید:

> هر نشست پایدار است و از قطع اتصال تصادفی (مانند پایان مهلت اتصال ssh(1)) یا جدا شدن عمدی (با فشردن کلیدهای «C-b d») جان سالم به در می‌برد.

به عبارت دیگر: چه SSH به‌طور غیرمنتظره قطع شود و چه خودتان با `C-b d` جدا شوید، نشست باقی می‌ماند.

سه فرمانی که همیشه از آن‌ها استفاده خواهید کرد (اگر tmux هنوز نصب نیست، ابتدا آن را با مدیر بسته سیستم خود نصب کنید؛ در Ubuntu این فرمان `sudo apt install tmux` است):

```bash
tmux new -s agent      # create a session named agent and enter it
tmux ls                # list every session on the server
tmux attach -t agent   # attach to that session again
```

برای فاصله گرفتن، `Ctrl-b` و سپس `d` را فشار دهید تا جدا شوید — کلیدهای پیش‌فرض راهنما از پیشوند `C-b` استفاده می‌کنند، و `d` به معنای «جدا کردن کلاینت فعلی» است (یعنی جدا کردن کلاینت فعلی). کار در نشست ادامه می‌یابد؛ وقتی برگردید، `tmux attach` دوباره شما را وارد آن می‌کند. روش خود راهنما برای اتصال مجدد `$ tmux attach` است.

## امنیت SSH: به ورود با کلید تغییر دهید، کارکرد آن را تأیید کنید، سپس ورود با گذرواژه را خاموش کنید

هنگام سفارش، می‌توانید یک کلید عمومی SSH را نیز مستقیماً اضافه کنید و به‌صورت اختیاری گزینه «Key login only (turn off root password login)» را انتخاب کنید. مراحل زیر روش دستی تغییر به ورود با کلید است.

ترتیب مهم است. مستندات Ubuntu دقیقاً درباره همین موضوع هنگام تغییر پیکربندی OpenSSH هشدار می‌دهد: اگر SSH تنها راه ورود شما باشد و پیکربندی را اشتباه انجام دهید، یک راه‌اندازی مجدد می‌تواند دسترسی شما را به سرور خودتان قطع کند. بنابراین **ابتدا تأیید کنید، سپس غیرفعال کنید**.

**فرمان‌های زیر با Ubuntu به‌عنوان مثال آمده‌اند.** توزیع‌های دیگر نام سرویس‌ها و مسیرهای پیکربندی متفاوتی دارند — مستندات خود آن سیستم را بررسی کنید؛ ترتیب کار (تأیید کلید، سپس غیرفعال کردن گذرواژه‌ها، بررسی پیش از راه‌اندازی مجدد) ثابت می‌ماند.

1. **جفت کلید را روی دستگاه خودتان تولید کنید** (مستندات Ubuntu Server، بدون تغییر):

   ```bash
   ssh-keygen -t ed25519
   ```

2. **کلید عمومی را روی سرور قرار دهید** (این فرمان را روی macOS / Linux، یا در WSL روی Windows اجرا کنید؛ فرمان `chmod` روی سرور و در پوشه خانه شما پس از ورود اجرا می‌شود):

   ```bash
   ssh-copy-id root@<IP>
   ```

   صفحه Ubuntu می‌گوید محتوای `id_ed25519.pub` را به `~/.ssh/authorized_keys` در دستگاه مقصد اضافه کنید و مجوزهای آن فایل را دوباره بررسی کنید — فقط کاربر احراز هویت‌شده می‌تواند مجوز نوشتن داشته باشد؛ اگر مجوزها درست نیستند، `chmod go-w .ssh/authorized_keys` را اجرا کنید.

3. **تأیید کنید که با کلید وارد می‌شوید.** صفحه آن را این‌گونه بیان می‌کند: *«اکنون باید بتوانید بدون درخواست گذرواژه با SSH به target_machine متصل شوید.»* (در صفحه Ubuntu، `target_machine` به نشانی سرور شما اشاره دارد؛ این جمله یعنی می‌توانید بدون پرسیدن گذرواژه وارد شوید). این مرحله **نباید اجازه بازگشت به ورود با گذرواژه را داشته باشد**، وگرنه کلیدی که به‌درستی نصب نشده است همچنان وارد می‌شود:

   ```bash
   ssh -o PasswordAuthentication=no -o PreferredAuthentications=publickey -i ~/.ssh/id_ed25519 root@<IP>
   ```

   با `-o PasswordAuthentication=no` یک کلید اشتباه بلافاصله با `Permission denied` شکست می‌خورد، به‌جای درخواست گذرواژه؛ اگر رد شدید، **ادامه ندهید** — به مرحله 2 برگردید. در این نقطه **نشستی را که هنوز با گذرواژه وارد آن شده‌اید نبندید**؛ یک پنجره ترمینال دوم باز کنید.

4. **فقط پس از آنکه این کار جواب داد**، ورود با گذرواژه را خاموش کنید. ابتدا پیدا کنید کدام فایل‌ها این گزینه را کنترل می‌کنند — در Ubuntu، فایل `/etc/ssh/sshd_config` با `Include /etc/ssh/sshd_config.d/*.conf` شروع می‌شود و تنظیمات موجود در `sshd_config.d/` بر فایل اصلی اولویت دارند:

   ```bash
   sudo grep -rEi '^\s*PasswordAuthentication' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
   ```

   **هر** خطی را که مطابقت دارد به `PasswordAuthentication no` تغییر دهید (از جمله یک `yes` در فایلی زیر `sshd_config.d/`). فقط اگر هیچ خطی مطابقت نکرد، خط `PasswordAuthentication no` را به انتهای `/etc/ssh/sshd_config` اضافه کنید. دلیل آن در sshd_config(5) آمده است: «مگر آنکه خلاف آن ذکر شده باشد، برای هر کلیدواژه، نخستین مقدار به‌دست‌آمده استفاده می‌شود.» (یعنی مگر خلافش ذکر شده باشد، هر کلیدواژه نخستین مقدار خوانده‌شده را می‌گیرد)؛ فایل‌هایی که با `Include` وارد می‌شوند به ترتیب واژگانی پردازش می‌شوند، بنابراین مقدار قبلی اعمال می‌شود. راهنما دو گزینه را این‌گونه توصیف می‌کند: `PasswordAuthentication` — «مشخص می‌کند آیا احراز هویت با گذرواژه مجاز است.» (یعنی آیا احراز هویت با گذرواژه مجاز است)؛ `PubkeyAuthentication` — «مشخص می‌کند آیا احراز هویت با کلید عمومی مجاز است.» (یعنی آیا احراز هویت با کلید عمومی مجاز است).

5. **نحو را بررسی کنید، مقادیر مؤثر را ببینید، سپس راه‌اندازی مجدد کنید**:

   ```bash
   sudo sshd -t
   sudo sshd -T | grep -Ei '^(passwordauthentication|pubkeyauthentication) '
   ```

   `sshd -T` پیکربندی‌ای را چاپ می‌کند که sshd واقعاً استفاده خواهد کرد (حالت «آزمایش گسترده» در sshd(8): پیکربندی به خروجی استاندارد نوشته می‌شود). فقط در صورتی که `passwordauthentication no` و `pubkeyauthentication yes` را دیدید به راه‌اندازی مجدد ادامه دهید؛ اگر `passwordauthentication` هنوز `yes` است، فایل دیگری بر آن اولویت دارد — به مرحله قبل برگردید. اگر `sshd -t` خطایی گزارش کرد، هنوز راه‌اندازی مجدد نکنید.

   ```bash
   sudo systemctl restart ssh.service
   ```

6. **پس از راه‌اندازی مجدد دوباره بررسی کنید و نشست قدیمی را باز نگه دارید.** یک ترمینال جدید باز کنید و یک بار دیگر با همان فرمان مرحله 3 با کلید وارد شوید؛ سپس ورود فقط با گذرواژه را امتحان کنید که باید رد شود:

   ```bash
   ssh -o PubkeyAuthentication=no root@<IP>
   ```

   دیدن `Permission denied` یعنی ورود با گذرواژه خاموش است؛ فقط وقتی هر دو بررسی مطابق انتظار عمل کردند، نشست اصلی را ببندید.

> 💡 در این مرحله ماشینی دارید که می‌تواند عامل‌ها را برای مدت طولانی اجرا کند: ابزارها نصب شده‌اند، کلید و نقطه پایانی تنظیم شده‌اند، وظایف با قطع اتصال از بین نمی‌روند، و با کلید وارد می‌شوید.
## هزینه آن: دو بخش

- **سرور**: به‌ازای مدتی که هنگام سفارش انتخاب می‌کنید (1، 3، 6 یا 12 ماه) از موجودی شما کسر می‌شود — مدت‌های طولانی‌تر هزینه ماهانه کمتری دارند. قیمت شروع در جدول «Compare lines» در qcode.cc/en/cloud آمده است.
- **مدل‌ها**: بر اساس هر توکن صورت‌حساب می‌شوند و نرخ‌های هر مدل در [qcode.cc/models](https://qcode.cc/models) فهرست شده است.

هر دو از **همان موجودی حساب کاربری** کسر می‌شوند.

## صفحات مرتبط

- [سرورهای ابری: انتخاب، خرید و استفاده](/docs/getting-started/cloud-servers) — انتخاب خط، آزمایش 1 روزه، سفارش و تحویل
- [اسکریپت راه‌اندازی یک‌کلیکی](/docs/getting-started/one-click-install) — نصب ابزارها و نوشتن پیکربندی
- [متغیرهای محیطی](/docs/getting-started/environment) — متغیرهایی که هر ابزار می‌خواند
- [شروع سریع Codex](/docs/getting-started/codex-quick-start) — config.toml و auth.json برای Codex
- [صورت‌حساب و قواعد سرور ابری](/docs/reference/cloud-billing) — شرایط، تمدید خودکار، بازپرداخت‌ها و سیاست استفاده قابل قبول