Skip to content

暗号化同期

同期方向と自動同期の状態を表示したSync画面

sshcは同期用のクラウドストレージを提供せず、同期データを預かりません。利用者が用意したS3互換オブジェクトストレージを同期先として使っています。接続設定、Vault内の認証情報、スニペット、同期対象のSSH鍵は、端末上で1つのスナップショットとして暗号化してから保存します。ストレージ事業者はこれらの内容を平文では取得できません。バケット名、S3オブジェクト名、オブジェクトのサイズと更新時刻は暗号化されません。

最初の端末を設定する

  1. バケット、エンドポイント、アクセスキーを入力する
  2. 接続テストを完了する
  3. 保存先が空なら同期キーを生成する
  4. 一度だけ表示される同期キーを安全な場所へ保管する

別の端末を追加する

追加する端末にも、同じS3バケット、オブジェクトのパス、同期キーを設定します。リモートに既存のスナップショットがある場合は、正しいキーで復号できたことを確認してから保存できます。データを分ける場合は、別のバケット内パスを指定できます。

同期方向は、送受信、送信専用、受信専用から選べます。

  • 送受信では、リモートの更新を受け取り、ローカルの変更も送信します
  • 送信専用では、送信前にリモートが更新されていないか確認しますが、リモートの内容は適用しません
  • 受信専用では、リモートの内容だけを受け取り、この端末の変更は送信しません

追加した端末を閲覧用にするなら、受信専用が適しています。履歴が分岐した場合も、現在のリモートを確認してから明示的に受信できます。この操作でバケットへ書き込むことはありません。

接続や受信に失敗した場合は、認証拒否、タイムアウト、DNS、TLS、同期キー不一致、未対応形式、破損したスナップショットを区別して表示します。同じ原因には同じエラーコードを返すため、トラブルシューティングで確認箇所を特定できます。分類できない失敗では、問い合わせに使える診断コードも表示します。

受信時のファイルは、リモートスナップショットを正として内容と権限をそのまま復元します。通常ファイルの0600と実行可能ファイルの0700を区別するため、内容が同じで権限だけが変わった場合も同期対象です。sshcが構造化できないOpenSSH設定や構文上の問題が含まれていても同期そのものは止めず、受信後にConnectionsやDiagnosticsで確認できます。

Gitに似た同期操作

  • 変更を確認すると、ローカルとリモートの差分を事前に表示します
  • Pushは、差分を確認した後に別の端末がリモートを更新していない場合だけ送信します
  • Pullは、差分確認後にリモートとローカルが変わっていない場合だけ適用します
  • Force Pushは、競合をローカル側の内容で解決します。確認後に保存先やリモートが変わっていれば上書きしません
  • Force Pullは、競合や削除をリモート側の内容で解決します。確認後にリモートまたはローカルが変わっていれば適用しません
  • 履歴では、バケット内の過去のスナップショットを表示します

自動同期を有効にすると、Vaultのロックが解除されている間、1分ごとにリモートの更新を確認します。送受信または送信専用の端末で設定を変更すると、最後の変更から5秒後に1回だけPushされます。5秒以内に変更を続けた場合は、最後の変更から数え直します。受信専用の端末からはPushしません。

同期しないファイル

ファイルを検索して同期対象から除外する画面

スマートフォンで同期対象を検索する画面

Sync画面の[同期するファイル]では、現在のファイルを検索して同期対象を切り替えられます。詳細設定では、ワークスペース直下の.sshcignoreを編集できます。除外パターンには正規表現ではなく、Gitignoreと同様のglob形式を使います。***?と、先頭/によるルート指定に対応しています。除外したファイルを再び含める場合は、パターンの先頭に!を付けます。

初期状態では、次のOSメタデータ、バックアップ、一時ファイル、ロックファイル、SSHの許可鍵・既知ホスト情報、ログイン時の環境変数・初期化スクリプトを除外します。

text
# OS metadata files
**/.DS_Store
**/Thumbs.db
**/desktop.ini

# Backup and temporary files
*.bak
*.tmp

# Lock files
*.lock

# ssh config
authorized_keys
authorized_keys2
known_hosts
known_hosts.old
known_hosts2
known_hosts2.old
/environment
/rc

/environment/rc.ssh直下だけを対象とし、サブディレクトリ内の同名ファイルは除外しません。

この既定値は.sshcignoreが未保存の場合に使われます。保存済みの除外設定はそのまま維持されます。

.sshcignoreを保存すると、その内容自体は同期され、同じ保存先を使う端末で共通の除外設定になります。除外された既存のローカルファイルは、通常のPullでもForce Pullでも削除・上書きされません。接続設定や鍵を除外すると他端末へ届かなくなるため、画面上でも警告します。

.sshcignore自体と、Vault・スニペットの暗号化転送用データは制御ファイルとして常に同期され、*などの広い規則でも除外されません。S3の認証情報、端末固有の履歴、実行中の処理を管理するファイルは、sshcが自動的に除外します。

Sync画面では、普段使う操作と設定を分けています。バケットと同期キーは[同期設定を管理]にまとまり、スナップショットの差分とS3上の履歴は[詳細・履歴]から開けます。履歴は最初に最新5件だけを表示し、必要に応じて全件を開けます。

同期キー

マスターパスワードは端末ごとに異なって構いません。一方、同じ保存先を使う端末には、共通の同期キーが必要です。同期キーを紛失すると、リモートのスナップショットを復号できません。

競合の扱いや履歴については、Push・Pull・履歴で詳しく説明しています。