- หน้าแรก
- เครือข่ายมัลติคลาวด์
- Customer Edge diagnostics
- Reaching a Customer Edge
- SSH
SSH
บันทึกเมื่อ 2026-07-28 จาก CE หนึ่งตัวของการปรับใช้นี้ sitecli/capture-manifest.json
บันทึกโหนดที่ใช้ และ scripts/capture-sitecli.sh --check ตรวจสอบพื้นผิวคำสั่งอีกครั้ง
กับ CE ที่ใช้งานจริง
SSH เข้าถึงบัญชี admin ของอุปกรณ์ ซึ่งมี login shell เป็น Site CLI
(/opt/bin/vpmu) นี่คือเส้นทางเดียวไปยัง พื้นผิวคำสั่งบนกล่องแบบเต็ม —
debug API เปิดเผย 34 คำสั่ง และตัวอุปกรณ์เองมีคำสั่งอีกหลายตัว
ที่ไม่ได้อยู่บน API นั้นเลย
cd terraformSLI=$(terraform output -json ce_sli_private_ips | jq -r '.eastus01')ssh -tt -i ~/.ssh/id_ed25519 -J azureuser@<operator-vm> "admin@$SLI"ทุกส่วนของบรรทัดคำสั่งนั้นมีความสำคัญ และสามส่วนถัดไปจะอธิบาย ว่าแต่ละส่วนป้องกันความล้มเหลวใด
ไม่มี shell prompt ให้ลงจอด: login shell ของ admin คือ Site CLI ดังนั้นคุณจะมาถึง
ที่พรอมต์ >>> ของมัน เรียกใช้คำสั่งบนกล่องด้วย execcli <name> ที่นั่น — ดู
คำสั่งบนกล่อง
เหตุใด cloud-init จึงเขียนคีย์ ไม่ใช่ API
หัวข้อที่มีชื่อว่า “เหตุใด cloud-init จึงเขียนคีย์ ไม่ใช่ API”admin_user_credentials.ssh_key บน site object ดูเหมือนฟิลด์สำหรับสิ่งนี้พอดี
มันได้รับการยอมรับ มันคงอยู่หลังจาก read-back และมันไม่ได้กำหนดค่าอะไรเลย vpm เป็นเจ้าของ
ผู้ใช้ในเครื่องของโหนดและปฏิเสธที่จะแตะตัวนี้ — จากล็อกของโหนดเอง สามครั้ง
ในการบูตครั้งเดียว:
vpm users.go:165: Won't do any change for user admin (internal skip)ทุกอย่างที่ตามมาเป็นผลจากบรรทัดเดียวนั้น /var/home/admin/.ssh ไม่เคยมีอยู่ ก่อนหรือ
หลังจากที่ไซต์ถึง ONLINE วันที่เปลี่ยน shadow ของ admin คงอยู่ที่วันที่สร้าง image
ในขณะที่ vesbkp และ vesopcon แสดงวันที่ปัจจุบัน เพราะ vpm ตั้งค่าทั้งสองนั้น
และข้าม admin ไป และ vpm ไม่บันทึกอะไรเกี่ยวกับ ssh_key หรือ authorized_keys
เลยในทุกจุด
ดังนั้นไฟล์จึงต้องเขียนนอก vpm admin คือ uid 2202 ที่ฝังอยู่ใน image ของโหนด
ดังนั้นมันมีอยู่ก่อนที่ cloud-init จะทำงาน และ owner: admin:admin จะแก้ไขได้ตอนเขียน
— ไม่ต้องมี runcmd ไม่ต้องแก้ไข ownership:
- 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 ทั้งสองที่มาพร้อมกับโหนด ไม่เคยมีอะไร
ที่ต้องเปิดใช้งาน — มีแค่ไฟล์ที่หายไป
เหตุใดจึงตอบสนองที่ที่อยู่เดียวเท่านั้น
หัวข้อที่มีชื่อว่า “เหตุใดจึงตอบสนองที่ที่อยู่เดียวเท่านั้น”sshd ผูก 0.0.0.0:22 แต่มีเฉพาะที่อยู่ ภายใน (SLI) เท่านั้นที่อยู่บน host network
stack ในแบบที่ sshd จะตอบสนอง eth0 ถูกเปลี่ยนชื่อเป็น a-i-eth0 และไม่มี host IP เลย
— Argo data plane เป็นเจ้าของอินเทอร์เฟซนั้น และที่อยู่ management/SLO ที่มันจะถือ
ปรากฏบน vhost0 แทน NIC อีกสองตัวยังคงอยู่บน host stack ภายใต้ชื่อของตัวเอง
ทดสอบจาก VM ภายใน VNet กับ CE หนึ่งตัว:
management/SLO address timed outexternal address timed outinternal/SLI address OPEN SSH-2.0-OpenSSH_8.7an unused address timed out (control)การทดสอบกับที่อยู่ที่คุณรู้จักโหนดจึงคืนค่าเหมือนกับที่ security group ปิดอยู่ ไม่มีอะไรบล็อกมัน ไม่มี listener บนที่อยู่นั้น
ที่อยู่สาธารณะของ CE ก็ไม่มี listener บน 22 เช่นกัน ซึ่งเป็นสาเหตุที่คำสั่งด้านบน
ผ่าน -J: VM ของผู้ดำเนินการภายใน VNet ในซับเน็ตเดียวกับที่อยู่ SLI
การปรับใช้นี้สร้างขึ้นมาหนึ่งตัวเพื่อจุดประสงค์นี้ —
terraform output -raw client_vm_name ตั้งชื่อมัน
Site CLI ต้องการเทอร์มินัลและ carriage return
หัวข้อที่มีชื่อว่า “Site CLI ต้องการเทอร์มินัลและ carriage return”login shell ของ admin ไม่ใช่ shell มันคือแอปพลิเคชัน go-prompt ซึ่งนำเทอร์มินัล
เข้าสู่ raw mode และอ่าน keystrokes แทนที่จะเป็นบรรทัด มีผลสี่ประการ แต่ละอย่างล้มเหลว
ในแบบที่ดูเหมือนปัญหาคนละอย่าง:
| กลไก | สิ่งที่เกิดขึ้นหากไม่มี |
|---|---|
จัดสรรเทอร์มินัล (ssh -tt) | panic: no such device or address จาก go-prompt.NewStandardInputParser ซึ่งอ่านดูเหมือนอุปกรณ์ที่ crash |
| ส่ง carriage return ไม่ใช่ line feed สำหรับ Enter | บรรทัดไม่เคยถูกส่ง และเซสชันปิดเมื่อ end-of-input โดยไม่พิมพ์อะไร |
| เปิด standard input ไว้ | การเชื่อมต่อสิ้นสุดก่อนที่คำสั่งจะแสดงผล ดังนั้นคำสั่งที่ทำงานได้จะดูเหมือนไม่มีเสียง |
| เขียนข้อความคำสั่งและไบต์ Enter แยกกัน | newline ลงเอยในบัฟเฟอร์เป็นอักขระตัวอักษรและ CLI ตอบ unknown command ซึ่งอ่านดูเหมือนคำสั่งไม่มีอยู่ |
ssh host 'some-command' จึงใช้ไม่ได้: อาร์กิวเมนต์ถูกเพิกเฉยและ prompt แบบโต้ตอบ
เริ่มต้นอยู่ดี ให้ขับเคลื่อนมันเป็นเทอร์มินัลหรือไม่ก็เลิก
scripts/sitecli_ssh_harvest.py คือ reference implementation
banner คือการตรวจสุขภาพฟรี
หัวข้อที่มีชื่อว่า “banner คือการตรวจสุขภาพฟรี”ก่อนที่คุณจะพิมพ์อะไร login banner ได้ตอบคำถามหลายข้อที่คุณจะต้องใช้คำสั่งไปถามไปแล้ว
จาก f5-xc-ce-vm-01 ASCII art และ public IP ถูกตัดออก:
UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITEDAll actions performed on this device are audited
Using https://register.ves.volterra.ioOS: rhel-9.2024.6Memory: 32768MiBStorage: sda: 31GiBCPU: Model: Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz | CPUs: 8Software: crt-20250613-3382DNS: 168.63.129.16: OKNTP: SyncedUptime: 0 days, 5 hours, 20 minutesRegistration Status: PROVISIONEDSLO IP: 10.0.1.4/26WELCOME IN SITE CLIRegistration Status แยกแยะโหนดที่ยังกำลังขึ้นมา (PROVISIONING) จากโหนดที่เสร็จแล้ว
(PROVISIONED) Software คือ build string ที่กำหนดว่าคำสั่งใดมีอยู่
DNS และ NTP ครอบคลุมสองข้อกำหนดที่ทำลายการลงทะเบียนก่อน ดังนั้นโหนดที่ไม่เคย
ออนไลน์มักจะบอกคุณว่าทำไมที่นี่แล้ว — ก่อนที่จะต้องใช้
chronyc-sources หรือ
dig เลย
การจัดหา keypair
หัวข้อที่มีชื่อว่า “การจัดหา keypair”-
สร้าง keypair หากคุณยังไม่มี Ed25519 แทนที่จะเป็น RSA: สั้นกว่า และได้รับการยอมรับจาก
sshdของอุปกรณ์Terminal window ssh-keygen -t ed25519 -C "ce-operator" -f ~/.ssh/id_ed25519 -
ชี้การปรับใช้ไปที่ครึ่ง สาธารณะ root module อ่านไฟล์ครั้งเดียว และส่ง string ลงไปทุกโหนด:
terraform/terraform.tfvars ssh_public_key_path = "~/.ssh/id_ed25519.pub"ssh_public_keyรับเนื้อหา inline แทน ซึ่งเป็นสิ่งที่ plan tests ใช้ ครึ่งส่วนตัวไม่เคยออกจากเวิร์กสเตชันของคุณ -
Apply อ่านคำเตือนที่ด้านบนของหน้านี้ก่อน — บนการปรับใช้ที่มีอยู่ สิ่งนี้ จะแทนที่ CE VM
สิ่งที่นี่ไม่ใช่
หัวข้อที่มีชื่อว่า “สิ่งที่นี่ไม่ใช่”แต่ละอย่างเหล่านี้ได้รับการทดสอบและถูกตัดออกในขณะที่ยังเชื่อว่าเส้นทางนั้นเป็นไปไม่ได้ แต่ละอย่างมีความน่าเชื่อถือพอที่จะเสียเวลาได้หนึ่งวัน
| ไม่ใช่สาเหตุ | วิธีที่ถูกตัดออก |
|---|---|
| credential ใช้ได้เฉพาะตอน create เท่านั้น | sshd เริ่มต้นประมาณ 90 วินาทีหลังบูตครั้งแรก ก่อนที่ site object จะมีอยู่ admin_user_credentials ยังปรากฏใน ReplaceSpecType และใช้ in place |
block_all_services | การปิดพอร์ต 22 บนที่อยู่ management เหมือนกันไม่ว่าบริการจะถูกบล็อกหรือไม่ |
| trailing newline บนคีย์ | ทดสอบทั้งสองแบบ ไม่มีการเปลี่ยนแปลง cloud-init ยังคง strip มันออก เพราะ literal block จะแสดงผลเป็นบรรทัดที่สอง ว่าเปล่า |
| CE software เวอร์ชันเก่าที่ถูก pin | ทำซ้ำได้บนสาม builds รวมถึงหนึ่งที่รัน OpenSSH 9.9 |
admin_password ที่หายไป | การตั้ง admin_password ควบคู่กับ ssh_key บน CE ที่สร้างจากศูนย์ไม่ได้เปลี่ยนแปลงอะไร |
เส้นทางอื่น ๆ
หัวข้อที่มีชื่อว่า “เส้นทางอื่น ๆ”ONLINE