SSH:繰り返し実行・記録できるタスクに適しています
依存関係のインストール、コードの取得、コンパイル、テスト、ログ確認、ファイル検証にはSSHが適しています。ネットワークが一時的に不安定になっても、tmux、screen、CI Runnerを使えばデバイス上でタスクを継続できます。
- xcodebuild、fastlane、スクリプト化したパイプラインに適しています
- コマンド、出力、エラーコードをログに残しやすい
- ほとんどの操作でデスクトップ画面の継続的な転送が不要
コマンドラインでのビルド、自動化スクリプト、長時間実行するタスクにはSSHを優先します。Xcodeの操作、グラフィック出力の確認、デスクトップアプリの操作が必要な場合のみ、コンソールのデバイス詳細からブラウザのリモートセッションを開始してください。
DplyMiniではクラウド上の専有物理Macを提供しています。1つの注文につき1台の物理ノードが割り当てられ、仮想マシンではありません。接続前にホストアドレス、ユーザー名、ホストフィンガープリントを確認してから、プロジェクトの転送やビルドを開始してください。
接続方法によってデバイスの設定は変わりませんが、作業効率、ネットワークへの敏感さ、セッション復旧の方法は変わります。継続的なタスクはバックグラウンドで実行し、デスクトップを表示する必要がある作業にだけグラフィカルセッションを使いましょう。
依存関係のインストール、コードの取得、コンパイル、テスト、ログ確認、ファイル検証にはSSHが適しています。ネットワークが一時的に不安定になっても、tmux、screen、CI Runnerを使えばデバイス上でタスクを継続できます。
Xcodeを開く、シミュレーター画面を確認する、グラフィカルツールを調整する、デスクトップアプリの状態を確認するといった作業では、コンソールのデバイス詳細からリモートセッションを開始してください。継続的なビルドを、ブラウザタブを開き続けることに依存させないでください。
簡単な判断:コマンドで表現でき、繰り返し実行する手順はSSHを優先します。macOSのグラフィカルインターフェースを見たり操作したりする必要がある場合だけ、ブラウザのリモートアクセスを使用してください。
アドレスを取得してすぐに複数のユーザー名を試したり、不明なフィンガープリントを繰り返し受け入れたりしないでください。まずコンソールのデバイス詳細で提供情報を確認し、ローカルターミナルから接続します。
操作者ごとに自分の鍵を使用し、チームメンバー間で秘密鍵をコピーしないでください。最新の鍵タイプを使用し、秘密鍵にはローカルの保護パスフレーズを設定することをおすすめします。
ssh-keygen -t ed25519 -C "deploymini-access"
公開鍵は通常、 ~/.ssh/id_ed25519.pubにあります。秘密鍵ファイルをアップロードしたり、チャットに貼り付けたり、コードリポジトリやチケットの添付ファイルに入れたりしないでください。
cat ~/.ssh/id_ed25519.pub
アドレス、ポート、ユーザー名は現在の注文のデバイス詳細に記載されたものを使用してください。他の注文の接続コマンドを流用したり、ノード名からアドレスを推測したりしないでください。
ssh -p <port> <user>@<host>
ターミナルで初めてホストを信頼するか尋ねられたら、表示されたフィンガープリントをデバイス詳細の情報と一つずつ照合してください。一致しない場合は接続を中止してチケットを提出し、yesを直接入力しないでください。
SHA256:<fingerprint-from-device-details>
メンバーがプロジェクトを離れたとき、デバイスを引き継いだとき、または一時的な協業が終わったときは、該当する公開鍵を直ちに削除してください。1つの共有鍵でチーム全体を長期間運用しないでください。
ローカルのSSH configでデバイスにエイリアスを設定できますが、ホスト、ポート、ユーザー名は引き続きコンソールに表示される現在の提供情報を使用してください。
known_hostsのエントリが突然変わった場合は、まず注文またはアドレスが変更されていないか確認してください。確認前に古い記録を削除して新しいフィンガープリントを受け入れないでください。
クリップボードは短いテキストや一度だけ使うコマンドに適しています。秘密鍵、完全な決済情報、長い機密設定の転送には使用しないでください。コピー後はローカルとリモートのクリップボードを消去します。
まず現在のウィンドウに合った拡大縮小率を使用します。細かな操作が必要な場合だけ全画面表示にし、入力遅延が大きくなったら全画面表示を解除して解像度を下げ、接続状態を再確認してください。
ここでは典型的なSSHセッションを示します。実際のアドレス、ユーザー名、プロジェクトパス、Scheme、エクスポート設定は注文とプロジェクトによって異なるため、サンプルのパラメータをそのままコピーしないでください。
$ ssh -p <port> <user>@<host>
The authenticity of host cannot be established.
ED25519 key fingerprint is SHA256:<fingerprint>
Are you sure you want to continue connecting? yes
Connected to dedicated physical Mac mini
$ sw_vers
ProductName: macOS
ProductVersion: <installed-version>
$ cd ~/work/ExampleApp
$ xcodebuild \
-workspace ExampleApp.xcworkspace \
-scheme ExampleApp \
-configuration Release \
build
** BUILD SUCCEEDED **
$ bundle exec fastlane ios build
[fastlane] Resolving project configuration
[fastlane] Running archive workflow
[fastlane] Build artifacts ready for verification
$ shasum -a 256 ./output/ExampleApp.ipa
<checksum> ./output/ExampleApp.ipa
macOS、Xcode、Ruby、依存関係管理ツール、プロジェクトのコミットバージョンを記録します。差異が発生した場合は、すべての依存関係をすぐに再インストールするのではなく、まず環境記録を比較してください。
出力パス、ファイルサイズ、チェックサム、主要なビルドログを記録します。ダウンロード後、受信側でもう一度チェックサムを計算し、転送中に変更がなかったことを確認してください。
一度に1つの層だけを検証し、各手順の結果を記録します。これにより、問題がローカルの名前解決、出口ネットワーク、アクセスルール、認証情報、デバイス側サービスのどこで発生したかを判断できます。
接続コマンドがデバイス詳細に現在表示されているホストアドレスを使用していることを確認します。ホスト名を使う場合は、想定アドレスに解決できるか確認し、ローカルのhostsによる上書きを除外してください。
nslookup <host>
現在のネットワークで外部接続を確立できることを確認します。企業ネットワーク、ゲストWi-Fi、プロキシ、VPNによって出口経路が変わることがあるため、正常なことが分かっているネットワークに切り替えて比較してください。
traceroute <host>
注文で提供されたポートを確認し、ローカルのセキュリティソフトや組織のネットワークポリシーによるブロックがないか調べます。すべてのデバイスがデフォルトのSSHポートを使うとは限りません。
nc -vz <host> <port>
「ポートに到達できない」状態と「認証失敗」を区別してください。認証に失敗した場合は、ユーザー名、公開鍵のパス、鍵の権限、ssh-agentを確認し、異なるパスワードを連続して試して原因を調べないでください。
ssh -vv -i ~/.ssh/id_ed25519 <user>@<host>
ポートに到達できるのにセッションがすぐ切断される場合は、切断前に表示された完全なエラーを記録します。ブラウザセッションに異常がある場合は、SSH接続がまだ可能かも確認し、グラフィカル経路の問題かデバイス全体の状態かを切り分けてください。
Connection reset | timeout | permission denied
最後にコンソールへ戻り、注文、ノード、デバイス情報を確認します。すべてのノードは365日、年間を通じて稼働しています。個別の接続可否はコンソールにリアルタイムで表示される状態を基準にしてください。
pingだけを結論の根拠にしない。一部のネットワークではICMPが制限されますが、SSHの宛先ポートには正常に接続できる場合があります。判断時は、名前解決の結果、宛先ポートのテスト、SSHの詳細出力をすべて記録してください。
専有物理マシンはリソース競合を減らしますが、チーム内のアクセス管理に代わるものではありません。鍵、一時的な認証情報、プロジェクトデータ、リモートデスクトップは、引き続き最小権限で管理してください。
個人鍵で始め、不要になったら能動的に無効化する。
サポート担当者が接続問題を調査する際、あなたの秘密鍵は必要ありません。メール、チャット、コードリポジトリ、チケットの添付ファイルで秘密鍵の内容を送信しないでください。
エラーの種類、コマンドパラメータの構造、発生時刻、クライアントバージョンを残し、ホストアドレス、ユーザー名、プロジェクト名、機密値は明確なプレースホルダーに置き換えてください。
ブラウザのグラフィカルインターフェースの快適さは、往復遅延、ジッター、利用可能な帯域幅に大きく左右されます。一方、コンパイル速度はプロジェクト、キャッシュ、デバイス構成により大きく変わるため、分けて判断してください。
チーム、コードリポジトリ、成果物ストレージまでの経路全体に適したノードを選びます。短時間の最低遅延が、セッション全体の安定性を意味するとは限りません。ジッターやパケットロスも入力操作に影響します。
素材、モデル、ビルド成果物は分割して転送します。転送前後にファイル数、合計サイズ、チェックサムを記録し、失敗時は差分のある部分だけを再転送してください。
長時間のコンパイル、テスト、エンコードはデバイス側のバックグラウンドで実行し、ログをファイルに書き込みます。ブラウザを閉じたりローカルネットワークが不安定になったりしても、タスクが中断されないようにしてください。
前述の手順で接続問題を特定できない場合は、コンソールから該当する注文のチケットを提出してください。情報が詳しいほど、サポートチームは問題を再現し、どの層で発生しているか判断しやすくなります。
デバイスに接続できない、セッションが繰り返し切断される、提供情報に異常がある場合は、コンソールの該当する注文からチケットを提出してください。注文情報を複数のメールスレッドに分散させないようにしましょう。
まだ注文していない場合や接続方法を確認したい場合は、想定するタスク、対象ノード、クライアント環境、予定レンタル期間を明記し、support@deploymini.comまでお送りください。
構成と5つのノードのいずれかを選択し、注文完了後にコンソールで接続情報を確認します。初回ログインでは、このページの順序に従ってホストアドレス、ユーザー名、フィンガープリントを確認してください。