تخطَّ إلى المحتوى

SSH

تم الالتقاط بتاريخ 2026-07-28 من أحد CE في هذا النشر. يُسجّل sitecli/capture-manifest.json العقدة المعنية، ويُعيد scripts/capture-sitecli.sh --check التحقق من سطح الأوامر مقارنةً بـ CE حي.

يصل SSH إلى حساب admin على الجهاز، الذي تكون قشرة تسجيل دخوله هي Site CLI (/opt/bin/vpmu). هذا هو المسار الوحيد إلى سطح الأوامر الكامل على الجهاز — يعرض debug API 34 أمرًا، بينما يوفر الجهاز نفسه أوامر أكثر بكثير غير متوفرة في ذلك الـ API.

Terminal window
cd terraform
SLI=$(terraform output -json ce_sli_private_ips | jq -r '.eastus01')
ssh -tt -i ~/.ssh/id_ed25519 -J azureuser@<operator-vm> "admin@$SLI"

كل جزء من سطر الأوامر هذا ضروري، وتشرح الأقسام الثلاثة التالية الخطأ الذي يمنعه كل منها.

لا يوجد موجه shell للوصول إليه: قشرة تسجيل دخول admin هي Site CLI، لذا تصل مباشرةً إلى موجه >>> الخاص بها. شغّل الأوامر على الجهاز باستخدام execcli <name> هناك — راجع الأوامر على الجهاز.

لماذا يكتب cloud-init المفتاح، لا الـ API

Section titled “لماذا يكتب cloud-init المفتاح، لا الـ API”

يبدو admin_user_credentials.ssh_key على كائن الموقع تمامًا كالحقل المخصص لهذا الغرض. يُقبل، ويبقى عند القراءة الثانية، ولا يُهيّئ شيئًا. يمتلك vpm المستخدمين المحليين على العقدة ويرفض لمس هذا المستخدم — من سجل العقدة نفسه، ثلاث مرات خلال تشغيل واحد:

vpm users.go:165: Won't do any change for user admin (internal skip)

كل شيء آخر ينبثق من هذا السطر الواحد. لا يوجد /var/home/admin/.ssh أبدًا، قبل أو بعد وصول الموقع إلى ONLINE. يبقى تاريخ آخر تغيير لكلمة مرور admin عند تاريخ بناء الصورة بينما يُظهر vesbkp وvesopcon التاريخ الحالي، لأن vpm عيّن هذين الاثنين وتخطّى admin. ولا يُسجّل vpm أي شيء عن ssh_key أو authorized_keys في أي وقت.

لذا يجب كتابة الملف خارج vpm. admin هو uid 2202، مُضمَّن في صورة العقدة، لذا فهو موجود قبل تشغيل cloud-init ويُحلَّل owner: admin:admin عند الكتابة — دون runcmd، دون إصلاح ملكية:

- path: /var/home/admin/.ssh/authorized_keys
permissions: "0600"
owner: admin:admin
content: |
${ssh_public_key}

كان sshd دائمًا مستعدًا. تُبلّغ sshd -T عن pubkeyauthentication yes، ويظهر admin في AllowUsers في كلا ملفَّي sshd_config المُضمَّنَين في العقدة. لم يكن هناك شيء لتفعيله قط — فقط ملف مفقود.

لماذا يستجيب على عنوان واحد فقط

Section titled “لماذا يستجيب على عنوان واحد فقط”

يرتبط sshd بـ 0.0.0.0:22، لكن العنوان الداخلي (SLI) فقط هو الموجود في مكدس شبكة المضيف بطريقة يستجيب عليها sshd. يُعاد تسمية eth0 إلى a-i-eth0 ولا يحمل أي IP للمضيف على الإطلاق — مستوى بيانات Argo يمتلك تلك الواجهة، وعنوان management/SLO الذي كان سيحمله يظهر على vhost0 عوضًا عن ذلك. تبقى بطاقتا الشبكة الأخريان على مكدس المضيف تحت أسمائهما الخاصة.

تم الاستطلاع من VM داخل VNet، على أحد CE:

management/SLO address timed out
external address timed out
internal/SLI address OPEN SSH-2.0-OpenSSH_8.7
an unused address timed out (control)

استطلاع العنوان الذي تعرف العقدة به يُعيد بالضبط ما يُعيده مجموعة أمان مُغلقة. لا شيء يحجبه؛ لا يوجد مستمع على ذلك العنوان.

العناوين العامة لـ CE لا يوجد عليها مستمع على المنفذ 22 أيضًا، وهو سبب استخدام الأمر أعلاه لـ -J: VM للمشغّل داخل VNet، في الشبكة الفرعية ذاتها لعناوين SLI. يبني هذا النشر واحدًا لهذا الغرض — يُسمّيه terraform output -raw client_vm_name.

تحتاج Site CLI إلى طرفية وإلى إرجاع حرف الإدخال

Section titled “تحتاج Site CLI إلى طرفية وإلى إرجاع حرف الإدخال”

قشرة تسجيل دخول admin ليست shell. إنها تطبيق go-prompt يضع الطرفية في وضع raw ويقرأ ضربات المفاتيح لا الأسطر. أربع نتائج، كل منها يفشل بطريقة تبدو مشكلة مختلفة:

الآليةما يحدث في غيابها
تخصيص طرفية (ssh -tt)panic: no such device or address من go-prompt.NewStandardInputParser، ما يبدو كتعطل الجهاز
إرسال إرجاع حرف (carriage return) لا تغذية سطر (line feed) لمفتاح Enterلا يُرسَل السطر أبدًا، وتُغلق الجلسة عند نهاية الإدخال دون طباعة أي شيء
إبقاء الإدخال القياسي مفتوحًاينتهي الاتصال قبل عرض الأمر، فيبدو الأمر العامل صامتًا
كتابة نص الأمر وبايت Enter بشكل منفصليصل السطر الجديد إلى المخزن المؤقت كحرف حرفي ويُجيب الـ CLI بـ unknown command، ما يبدو كأن الأمر غير موجود

لذا لا يعمل ssh host 'some-command': المعطى يُتجاهل وتبدأ الموجه التفاعلي على أي حال. قُده كطرفية أو لا تقده أصلًا. scripts/sitecli_ssh_harvest.py هو التطبيق المرجعي.

البانر هو فحص صحة مجاني

Section titled “البانر هو فحص صحة مجاني”

قبل أن تكتب أي شيء، أجاب بانر تسجيل الدخول بالفعل على عدد من الأسئلة التي كنت ستقضي أوامر لمعرفتها. من f5-xc-ce-vm-01، مع حذف الرسم النصي ASCII والـ IP العام:

UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITED
All actions performed on this device are audited
Using https://register.ves.volterra.io
OS: rhel-9.2024.6
Memory: 32768MiB
Storage: sda: 31GiB
CPU: Model: Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz | CPUs: 8
Software: crt-20250613-3382
DNS: 168.63.129.16: OK
NTP: Synced
Uptime: 0 days, 5 hours, 20 minutes
Registration Status: PROVISIONED
SLO IP: 10.0.1.4/26
WELCOME IN SITE CLI

يُميّز Registration Status عقدة لا تزال في مرحلة الإنشاء (PROVISIONING) عن تلك التي أنهت (PROVISIONED). Software هي سلسلة البناء التي تحدد الأوامر الموجودة. يُغطّي DNS وNTP التبعيتَين اللتَين تعطلان التسجيل أولًا، لذا فإن عقدة لم تأتِ على الإنترنت عادةً ما تكون قد أخبرتك بالسبب هنا — قبل الحاجة إلى chronyc-sources أو dig أصلًا.

  1. أنشئ زوج مفاتيح إن لم يكن لديك واحد. Ed25519 بدلًا من RSA: أقصر، ومقبول من sshd الجهاز.

    Terminal window
    ssh-keygen -t ed25519 -C "ce-operator" -f ~/.ssh/id_ed25519
  2. وجّه النشر إلى النصف العام. تقرأ وحدة المعالجة الجذر الملف مرة واحدة وتُمرّر السلسلة النصية إلى كل عقدة:

    terraform/terraform.tfvars
    ssh_public_key_path = "~/.ssh/id_ed25519.pub"

    يأخذ ssh_public_key المادة مضمّنة عوضًا عن ذلك، وهو ما تستخدمه اختبارات الخطة. النصف الخاص لا يغادر محطة عملك أبدًا.

  3. طبّق. اقرأ التحذير في أعلى هذه الصفحة أولًا — على نشر موجود سيستبدل هذا CE VMs.

تم اختبار كل مما يلي واستبعاده أثناء الاعتقاد بأن المسار مستحيل. كل منها معقول بما يكفي لاستهلاك يوم كامل.

ليس السببكيف استُبعد
البيانات الاعتمادية تنطبق فقط عند الإنشاءيبدأ sshd نحو 90 ثانية في أول تشغيل، قبل وجود كائن الموقع. admin_user_credentials موجود أيضًا في ReplaceSpecType ويُطبَّق في المكان.
block_all_servicesإغلاق المنفذ 22 على عنوان management متطابق سواء كانت الخدمات محجوبة أم لا.
سطر جديد في نهاية المفتاحاختُبر بالطريقتين، لا تغيير. cloud-init يجردها على أي حال، لأن كتلة حرفية ستُصيّر سطرًا ثانيًا فارغًا.
برمجيات CE أقدم أو مُثبَّتةجُرّبت على ثلاثة بناءات، بما فيها واحدة تعمل بـ OpenSSH 9.9.
admin_password مفقودتعيين admin_password إلى جانب ssh_key على CE جديد من الصفر لم يغيّر شيئًا.