- 홈
- 멀티클라우드 네트워킹
- Customer Edge diagnostics
- Reaching a Customer Edge
- SSH
SSH
이 배포의 CE 중 하나에서 2026-07-28에 캡처되었습니다. sitecli/capture-manifest.json에는 해당 노드가 기록되어 있으며, scripts/capture-sitecli.sh --check를 통해 라이브 CE와 명령어 목록을 재검증할 수 있습니다.
SSH는 어플라이언스 admin 계정에 도달하며, 해당 계정의 로그인 쉘은 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"해당 명령줄의 모든 부분은 필수적이며, 다음 세 섹션에서 각 요소가 방지하는 장애를 설명합니다.
착지할 쉘 프롬프트는 없습니다: admin의 로그인 쉘 자체가 Site CLI이므로, 해당 CLI의 >>> 프롬프트에 바로 진입합니다. 거기서 온박스 명령어를 execcli <name>으로 실행하세요 — 온박스 명령어를 참조하십시오.
cloud-init이 API가 아닌 키를 작성하는 이유
섹션 제목: “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의 shadow 최종 변경 날짜는 이미지 빌드 날짜로 유지되는 반면 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은 노드에 포함된 두 개의 sshd_config 파일 모두에서 AllowUsers에 나타납니다. 활성화할 것이 전혀 없었습니다 — 단지 파일이 없었을 뿐입니다.
하나의 주소에서만 응답하는 이유
섹션 제목: “하나의 주소에서만 응답하는 이유”sshd는 0.0.0.0:22에 바인딩되지만, sshd가 응답하는 방식으로 호스트 네트워크 스택에 있는 주소는 내부(SLI) 주소뿐입니다. eth0은 a-i-eth0으로 이름이 변경되고 호스트 IP를 전혀 가지지 않습니다 — Argo 데이터 플레인이 해당 인터페이스를 소유하며, 원래 있어야 할 관리/SLO 주소는 대신 vhost0에 나타납니다. 나머지 두 NIC는 자체 이름으로 호스트 스택에 유지됩니다.
VNet 내부의 VM에서 하나의 CE를 대상으로 프로빙한 결과:
관리/SLO 주소 타임아웃외부 주소 타임아웃내부/SLI 주소 열림 SSH-2.0-OpenSSH_8.7사용되지 않는 주소 타임아웃 (대조군)노드를 알고 있는 주소로 프로빙하면 닫힌 보안 그룹이 반환하는 것과 정확히 동일한 결과가 나옵니다. 아무것도 차단하지 않으며, 해당 주소에 리스너가 없는 것입니다.
CE 공용 주소에도 22번 포트에 리스너가 없으므로, 위의 명령이 -J를 통해 이동하는 이유입니다: SLI 주소와 동일한 서브넷에 있는 VNet 내부의 운영자 VM이 필요합니다. 이 배포는 해당 목적으로 하나를 구축합니다 — terraform output -raw client_vm_name이 그 이름을 제공합니다.
Site CLI에는 터미널과 캐리지 리턴이 필요합니다
섹션 제목: “Site CLI에는 터미널과 캐리지 리턴이 필요합니다”admin 로그인 쉘은 일반 쉘이 아닙니다. 터미널을 raw 모드로 전환하고 라인이 아닌 키 입력을 읽는 go-prompt 애플리케이션입니다. 네 가지 결과가 있으며, 각각 다른 문제처럼 보이는 방식으로 실패합니다:
| 설정 | 없을 때 발생하는 문제 |
|---|---|
터미널 할당(ssh -tt) | go-prompt.NewStandardInputParser에서 panic: no such device or address 발생, 어플라이언스가 충돌한 것처럼 보임 |
| Enter 시 라인 피드 대신 캐리지 리턴 전송 | 라인이 제출되지 않고 아무것도 출력하지 않은 채 입력 종료 시 세션이 닫힘 |
| 표준 입력 열린 상태 유지 | 명령이 렌더링되기 전에 연결이 종료되어 동작하는 명령이 무음으로 보임 |
| 명령 텍스트와 Enter 바이트를 별도로 전송 | 줄 바꿈이 버퍼에 리터럴 문자로 들어가 CLI가 unknown command로 응답, 명령이 존재하지 않는 것처럼 보임 |
따라서 ssh host 'some-command'는 동작하지 않습니다: 인수가 무시되고 대화형 프롬프트가 시작됩니다. 터미널로 구동하거나 아예 사용하지 마십시오. scripts/sitecli_ssh_harvest.py가 참조 구현입니다.
배너는 무료 상태 점검입니다
섹션 제목: “배너는 무료 상태 점검입니다”아무것도 입력하기 전에, 로그인 배너가 이미 여러 가지 명령어로 확인해야 할 질문들에 답해 줍니다. f5-xc-ce-vm-01에서 ASCII 아트와 공용 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는 어떤 명령어가 존재하는지 결정하는 빌드 문자열입니다. DNS와 NTP는 등록을 먼저 중단시키는 두 가지 의존성을 다루므로, 온라인에 올라오지 않은 노드는 chronyc-sources나 dig가 필요하기 전에 이미 여기서 이유를 알려주는 경우가 많습니다.
키페어 제공
섹션 제목: “키페어 제공”-
키페어가 아직 없다면 생성합니다. RSA 대신 Ed25519를 사용하십시오: 더 짧고 어플라이언스
sshd에서 허용됩니다.Terminal window ssh-keygen -t ed25519 -C "ce-operator" -f ~/.ssh/id_ed25519 -
배포를 공개 키 절반으로 지정합니다. 루트 모듈이 파일을 한 번 읽어 모든 노드에 문자열을 전달합니다:
terraform/terraform.tfvars ssh_public_key_path = "~/.ssh/id_ed25519.pub"ssh_public_key는 재료를 인라인으로 받으며, 이는 플랜 테스트에서 사용하는 방식입니다. 개인 키는 절대 워크스테이션을 벗어나지 않습니다. -
적용합니다. 이 페이지 상단의 경고를 먼저 읽으십시오 — 기존 배포에서는 CE VM이 교체됩니다.
해당하지 않는 것
섹션 제목: “해당하지 않는 것”다음 각 항목은 경로가 불가능하다고 여겨지는 동안 테스트되고 배제되었습니다. 각각 하루를 낭비할 만큼 그럴듯합니다.
| 원인이 아닌 것 | 배제 방법 |
|---|---|
| 자격증명은 생성 시에만 적용됨 | sshd는 사이트 객체가 존재하기 전인 최초 부팅 후 약 90초에 시작됩니다. admin_user_credentials는 ReplaceSpecType에도 있으며 인플레이스로 적용됩니다. |
block_all_services | 관리 주소의 22번 포트 닫힘은 서비스 차단 여부에 관계없이 동일합니다. |
| 키에 후행 줄 바꿈 | 두 가지 방식 모두 테스트했으나 변화 없음. cloud-init이 여전히 이를 제거하는데, 리터럴 블록은 그렇지 않으면 두 번째 빈 줄을 렌더링합니다. |
| 고정된 구버전 CE 소프트웨어 | OpenSSH 9.9를 실행하는 빌드를 포함한 세 번의 빌드에서 재현됨. |
admin_password 누락 | 처음부터 새로운 CE에서 ssh_key와 함께 admin_password를 설정해도 변화 없음. |