- ホーム
- マルチクラウドネットワーク
- Customer Edge diagnostics
- Reaching a Customer Edge
- SSH
SSH
このデプロイメントの1つのCEから2026-07-28にキャプチャされました。sitecli/capture-manifest.json
にはどのノードかが記録されており、scripts/capture-sitecli.sh --check でライブCEに対してコマンド
サーフェスを再検証できます。
SSHはアプライアンスの admin アカウントに到達します。ログインシェルはSite CLI
(/opt/bin/vpmu)です。これはオンボックスコマンドサーフェス全体への唯一のルートです —
デバッグ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"このコマンドラインのすべての部分が重要な役割を担っており、次の3つのセクションでそれぞれが防ぐ障害を説明します。
着地するシェルプロンプトはありません: admin のログインシェルそのものがSite CLIであるため、
>>> プロンプトに到達します。そこで execcli <name> としてオンボックスコマンドを実行します —
オンボックスコマンドを参照してください。
cloud-initがキーを書き込む理由、APIでないのはなぜか
Section titled “cloud-initがキーを書き込む理由、APIでないのはなぜか”サイトオブジェクトの admin_user_credentials.ssh_key はこれのためのフィールドのように見えます。
受け入れられ、読み返しても残り、そして何も設定しません。vpm がノードのローカルユーザーを所有しており、
このユーザーへのタッチを拒否します — ノード自身のログから、1回のブートで3回記録されています:
vpm users.go:165: Won't do any change for user admin (internal skip)その後のすべてはこの1行から来ています。/var/home/admin/.ssh はサイトが ONLINE になる前後を
問わず存在しません。admin のシャドウ最終変更日はイメージのビルド日のままです。一方、vesbkp と
vesopcon は現在の日付を示します。vpm がこの2つを設定して 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 に記載されています。
有効化すべきものは何もなかった — 欠けていたのはファイルだけでした。
1つのアドレスのみで応答する理由
Section titled “1つのアドレスのみで応答する理由”sshd は 0.0.0.0:22 にバインドしていますが、**内部(SLI)**アドレスのみが sshd が
応答できる形でホストネットワークスタックに存在します。eth0は a-i-eth0 にリネームされ、
ホストIPを持ちません — Argoデータプレーンがそのインターフェースを所有しており、本来そこに
あるべき管理/SLOアドレスは代わりに vhost0 に表示されます。他の2つのNICはそれぞれの名前で
ホストスタックに残ります。
VNet内のVMから1つのCEに対してプローブした結果:
management/SLO address timed outexternal address timed outinternal/SLI address OPEN SSH-2.0-OpenSSH_8.7an unused address timed out (control)ノードのアドレスとして知っているアドレスへのプローブは、閉じたセキュリティグループが返すのと まったく同じ結果を返します。何もブロックしていません。そのアドレスにリスナーが存在しないのです。
CEのパブリックアドレスにもポート22のリスナーがないため、上記のコマンドが -J を使用する理由です:
SLIアドレスと同じサブネット内のVNet内のオペレーターVM。このデプロイメントはその目的のために
1つを構築しています —
terraform output -raw client_vm_name で名前を確認できます。
Site CLIにはターミナルとキャリッジリターンが必要です
Section titled “Site CLIにはターミナルとキャリッジリターンが必要です”admin のログインシェルはシェルではありません。それは go-prompt アプリケーションであり、
ターミナルをrawモードにしてラインではなくキーストロークを読み取ります。4つの結果があり、
それぞれが異なる問題のように見える失敗をします:
| 仕組み | それなしで何が起きるか |
|---|---|
ターミナルを割り当てる(ssh -tt) | go-prompt.NewStandardInputParser から panic: no such device or address が発生し、アプライアンスがクラッシュしたように見える |
| Enterに改行(LF)ではなくキャリッジリターン(CR)を送る | ラインが送信されず、何も出力せずに入力終了でセッションが閉じる |
| 標準入力を開いたままにする | コマンドがレンダリングされる前に接続が終了するため、動作するコマンドが無音に見える |
| コマンドテキストと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 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 は最初に
登録を破壊する2つの依存関係をカバーしているため、オンラインになれなかったノードは通常ここですでに
原因を示しています —
chronyc-sources や
dig が必要になる前に。
キーペアの提供
Section titled “キーペアの提供”-
キーペアをまだ持っていない場合は生成してください。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が置換されます。
これが何でないか
Section titled “これが何でないか”以下の各項目は、そのルートがまだ不可能と信じられていた間にテストされ、除外されました。 それぞれ1日を費やすほど妥当に見えます。
| 原因でないもの | 除外の根拠 |
|---|---|
| 資格情報は作成時のみ適用される | sshd は最初のブートから約90秒後に開始されます。サイトオブジェクトが存在する前です。admin_user_credentials は ReplaceSpecType にも存在し、インプレースで適用されます。 |
block_all_services | 管理アドレスのポート22のクローズは、サービスがブロックされているかどうかに関わらず同一です。 |
| キーの末尾の改行 | 両方でテスト済み、変化なし。リテラルブロックがそうでなければ2行目の空行をレンダリングするため、cloud-initはそれを取り除きます。 |
| ピン留めされた古いCEソフトウェア | OpenSSH 9.9を実行しているものを含む3つのビルドで再現されました。 |
欠けている admin_password | スクラッチからのCEで ssh_key とともに admin_password を設定しても何も変わりませんでした。 |
その他のルート
Section titled “その他のルート”ONLINEである必要があります。