SSH:ビルド、自動化、ログ
次の作業に適しています: xcodebuild、fastlane、依存関係のインストール、リポジトリ同期、ログ確認、バックグラウンドスクリプト。ネットワークが一時的に不安定でも、セッション維持ツールを使えばリモートタスクを継続できます。
- 用途
- コマンド、スクリプト、継続的なビルド
- メリット
- 帯域使用量が少なく、診断情報が充実
- 制限
- macOSのGUIは利用できません
LemonVMでは専用のMac mini物理ノードを提供します。コマンドラインのビルド、ログ収集、自動化にはSSH、XcodeのGUI操作やリモート編集、完全なデスクトップが必要な作業にはVNCを使用します。接続前にコンソールからホストアドレス、ポート、ユーザー名、初期認証情報を取得してください。
同じクラウドMacでコマンドラインとGUIの作業を同時に行えます。安定した運用では、長時間タスクと診断をSSH、デスクトップを見ながら行う操作をVNCに任せます。
次の作業に適しています: xcodebuild、fastlane、依存関係のインストール、リポジトリ同期、ログ確認、バックグラウンドスクリプト。ネットワークが一時的に不安定でも、セッション維持ツールを使えばリモートタスクを継続できます。
XcodeのGUI、シミュレータ、素材管理、編集タイムラインなど、デスクトップの状態を確認する必要がある作業に適しています。遅延が大きい場合は、再接続を繰り返すのではなく、まず画質と解像度を下げてください。
別の注文のアドレスやポートを流用しないでください。現在のサービスに表示される接続情報を毎回確認してください。
現在のサービス詳細からホストアドレスとSSHポートをコピーします。アドレス、ポート、ノードで接続先が決まるため、ノードやサービスを変更したら再確認してください。
ユーザー名は接続情報と一字一句同じである必要があります。ローカルPCのユーザー名、リポジトリアカウント、チームメンバー名をSSHコマンドに入力しないでください。
秘密鍵ファイルは現在のローカルユーザーだけが読み取れるようにします。macOSまたはLinuxでは chmod 600 ~/.ssh/lemonvm_keyを実行し、 -i でファイルを指定します。
初回接続でホストフィンガープリントが表示されたら、まずコンソールの情報と照合します。内容が一致した場合のみ known_hostsに保存し、確認をそのままスキップしないでください。
Host、HostName、User、Port、IdentityFileをローカルのSSH設定に記述すると手入力のミスを減らせます。ただし、秘密鍵の内容を設定ファイルに書き込まないでください。
ssh -i ~/.ssh/lemonvm_key -p ポート ユーザー名@ホストアドレス
初回接続は中程度の画質と低めの解像度から始めます。入力、クリップボード、ウィンドウ切り替えが正常だと確認してから、回線の余裕に合わせて表示設定を調整してください。
コンソールに表示されたVNCのホストとポートを使用し、SSHのポートを流用しないでください。クライアントが一体型アドレスを求める場合は、その形式でホストとポートを入力します。
まずマウス、キーボード、ウィンドウの応答性を優先します。文字が十分に見えることを確認してから色や画質を上げ、初回接続で帯域を使い切らないようにしてください。
高解像度ではフレームごとの転送量が増えます。低速なネットワークでは単一ディスプレイと低解像度から始め、安定してからリモートデスクトップのサイズを調整してください。
接続後、機密情報を含まないテキストで双方向コピーをテストします。共有クリップボードで秘密鍵、完全なアクセストークン、長期認証情報を送らないでください。
クライアントでフルスクリーンを終了し、キーボードキャプチャを解除するショートカットを記録します。リモートのキー操作がローカルシステムに奪われ、セッション異常と誤認するのを防げます。
VNC画面が停止したら、まずSSHで負荷とネットワークを確認します。SSHに接続できるなら、通常は物理ノードが稼働中で、問題はGUIセッションまたは経路にある可能性が高いです。
診断では一度に1つの変数だけを変更します。まずSSHのハンドシェイク、次にネットワーク探査、最後に検証可能なリモートコマンドを確認します。これにより認証情報、ポート、経路、タスク環境の問題を切り分けられます。
Connecting to 」の後に応答がない:アドレス、ポート、ローカルの出口制限を確認します。$ ssh -v -p ポート ユーザー名@ホストアドレス
debug1: Connecting to host [アドレス] port [ポート]
debug1: Server host key: SHA256:[フィンガープリント]
debug1: Authentication succeeded (publickey)
$ ping -c 5 ホストアドレス
5 packets transmitted, 5 packets received
round-trip min/avg/max = 41.2/44.8/49.1 ms
$ ssh lemon-node "xcodebuild -version"
Xcode [現在のバージョン]
Build version [現在のビルド番号]
$ ssh lemon-node "cd ~/project && xcodebuild build"
** BUILD SUCCEEDED **
次の表は、各接続地点からシンガポール、東京、ソウル、香港、米国西部への相対的な差を確認するものです。インタラクティブなVNCでは遅延と揺らぎ、バックグラウンドビルドでは接続の安定性と持続スループットを重視します。
| 接続地・通信事業者 | シンガポール | 東京 | ソウル | 香港 | 米国西部 |
|---|---|---|---|---|---|
| 上海 · 中国電信 | 68 ms | 42 ms | 51 ms | 35 ms | 146 ms |
| 北京 · 中国聯通 | 91 ms | 54 ms | 46 ms | 58 ms | 139 ms |
| 深圳 · 中国移動 | 53 ms | 67 ms | 76 ms | 24 ms | 168 ms |
| 台北 · 固定回線 | 62 ms | 39 ms | 48 ms | 31 ms | 126 ms |
| ロサンゼルス · 法人向け光回線 | 171 ms | 112 ms | 124 ms | 143 ms | 27 ms |
読み方:同じ接続地では横方向の数値を比較します。VNCでは揺らぎとパケットロスも継続的に確認してください。実際の接続品質は、ローカルWi-Fi、通信事業者の出口、国際経路、バックグラウンド転送に左右されます。
ノード変更、画質変更、クライアント再起動を同時に行わないでください。次の6手順を順番に確認し、各手順の前後で遅延、パケットロス、操作応答を記録します。
有線または安定した5GHz Wi-Fiに切り替え、ローカルのダウンロードとクラウド同期を一時停止します。同じLANの他の端末も不安定なら、まずローカル回線を確認してください。
少なくとも数分間連続して探査し、安定した高遅延と断続的なパケットロスを区別します。短いスパイクはVNCのマウス操作や画面停止を引き起こしやすくなります。
シンガポール、東京、ソウル、香港、米国西部から、主なアクセス方向に近いノードを選びます。チームでは主な操作者またはビルド依存先の方向を基準にしてください。
まず色品質、圧縮レベル、フレームレートを下げ、入力応答が改善するか確認します。画面は鮮明でも操作遅延が大きい場合、帯域設定だけを上げないでください。
一時的に単一画面と低解像度へ切り替えます。応答が大きく改善するなら、1フレームのデータ量が現在の回線に適した範囲を超えています。
リポジトリ取得、依存関係のダウンロード、素材のアップロード、成果物の転送、リモート同期を確認します。大容量ファイルの転送は、リアルタイムのVNC操作と時間を分けて実行してください。
リモート接続の安全境界は、ローカル鍵、初期認証情報、セッションロック、チーム内の引き継ぎで構成されます。長期アクセス情報を公開チャットやリポジトリに貼り付けないでください。
デバイスごとに別の鍵を使い、秘密鍵は管理下の端末だけに保存します。端末をチームから外したり紛失したりしたら、対応する公開鍵を速やかに削除してください。
初回ログインと環境確認が終わったら、一時的な認証情報を更新します。スクリプト、ビルドログ、リポジトリ設定にそのまま使えるアクセス情報を残さないでください。
一時的に離れるときはリモートデスクトップをロックし、実行中のバックグラウンドタスクは終了しないでください。共有ワークスペースではローカルPCも同時にロックします。
複数人で作業する場合は、誰がいつタスクを実行したかを記録し、長期鍵を共有しないでください。引き継ぎ時にはタスクの状態、ログの場所、残りの手順を伝えます。
VNC画面が消えても物理ノードが停止したとは限りません。別の接続経路で状態を確認し、ビルドの重複起動、出力の上書き、実行中タスクの中断を避けてください。
まずローカルネットワークを確認し、次に対象ホストとポートをテストします。ネットワーク復旧後に再接続し、タスクログとプロセス状態を確認してから、元のコマンドをそのまま再実行しないでください。
確認項目:ローカル出口、対象ポート、最新ログの時刻コンソールで現在のサービス状態を確認し、SSHでシステムの応答を検証します。復旧後は電源とセッション設定を確認し、長時間タスク中に不適切なスリープへ移行しないようにします。
確認項目:SSH応答、システム時刻、実行中プロセス表示設定を下げてGUIセッションを再確立します。タスクの状態を確認する前にノード全体を再起動しないでください。バックグラウンドビルドが正常に続いている可能性があります。
確認項目:リモート負荷、GUIセッション、クライアント設定再接続後にログ、終了コード、成果物ディレクトリを確認します。元のタスクが終了または失敗したことを確認してから次のビルドを開始し、同じ出力先への同時書き込みを避けてください。
確認項目:プロセスID、終了コード、成果物の更新時刻