トラブルシューティング
エンジンを起動できない
sshc status
sshc engine --replaceCLIとsshcエンジンのバージョンが違う場合は、古い方を更新してから、sshcエンジンを起動し直してください。
| sshcエンジンの状態 | 実行するコマンド |
|---|---|
sshc service installで登録した稼働中のサービス | sshc service restart |
| 停止中、または定義が古いサービス | sshc service install |
| それ以外のsshcエンジン | sshc engine --replace |
Androidでは、エラー画面にバージョン、エラーコード、詳細、Android SDK、機種名、ABIが表示され、[診断情報をコピー]でまとめて共有できます。シークレットは診断レポートに含まれません。
保存したときに、中断した変更が残っているので保存できないと出る場合や、CLIでan interrupted change must be completed or rolled back first(古いバージョンではa pending transaction must be recovered first)と出る場合は、前の変更が途中で止まり、その記録が~/.ssh/sshc/journal/に残っています。記録が残っているあいだ、sshcはどの書き込みも断ります。
- [History]画面の「中断した変更」で[変更を見る]を押します。CLIからは
sshc openで画面を開けます。 - ファイルごとに変更前と変更後を比べます。秘密鍵やVaultのファイルは中身を出しません。
- すべてのファイルを変更前に戻す[取り消す]か、変更後にそろえる[完了させる]を選びます。
起動時にwas recorded by an sshc release before v0.24.0と表示されて止まる場合は、v0.24.0より前のsshcで中断した変更の記録が~/.ssh/sshc/journal/に残っています。今のバージョンでは、その変更を完了させることも取り消すこともできません。
- 前に使っていたバージョンのsshcを起動します。
- [History]画面の「中断した変更」で[完了させる]か[取り消す]を選びます。
- もう一度更新します。
前のバージョンに戻せない場合は、表示されたファイルを~/.ssh/sshc/journal/の外へ移すと起動できます。ただし、その変更は途中のまま残るので、記録のpathに書かれたファイルの内容を確かめてください。
was recorded by a newer sshc releaseと表示された場合は、記録を書いた新しいバージョンのsshcへ更新してから片付けてください。
Vaultのロックを解除できない
マスターパスワードは復旧できません。Vaultの作成に失敗した場合は、作成画面に表示されたエラーコードと原因を確認してください。Vaultのロックを解除できない場合は、入力したマスターパスワードが正しいか確認します。
エラーコードごとの対処:
vault_schema_newer: このsshcより新しいバージョンのsshcが、新しい形式でVaultを保存しています。sshcを更新してから、もう一度試してください。vault_schema_older: このsshcが読めない古い形式のVaultです。前に使っていたバージョンのsshcで一度ロックを解除して新しい形式へ移してから、このバージョンへ更新してください。vault_migration_failed: 新しい形式へ移す途中で失敗しました。元のVaultは置き換える前のまま残っています。ディスクの空きと~/.ssh/sshc/の権限を確かめて、もう一度ロックを解除してください。
同期後に秘密鍵が見つからない
IdentityFileがこのマシンに復元された鍵を指しているか確認してください。SSH Keysでグループを選んで生成した鍵や、グループへ移動した鍵は、~/.ssh/keys/...へ保存されます。SSH Configに記載されたIdentityFileのパスと、Connectionsの[最終的な値]に表示される最終的な絶対パスを比較し、古いマシンの絶対パスが残っていないか確認してください。
SSHで接続できない
接続に失敗したセッションは、サイドバーの行の2行目に短い表示を出します。全文はツールチップと、そのセッションを開いたときの知らせの枠に出ます。
| 行の表示 | ターミナルに出る文 | 確かめること |
|---|---|---|
| 接続を拒否されました | 接続を拒否されました。SSHサーバーが動いているか、ポート番号が合っているかを確認してください。 | 接続先のSSHサーバー、Port |
| 応答がありません | 接続先から応答がありません。接続先の電源とネットワーク、ファイアウォールを確認してください。 | 接続先の電源、ネットワーク、ファイアウォール、ConnectTimeout |
| 名前解決できません | 接続先の名前を名前解決できません。HostNameを確認してください。 | HostName。踏み台の名前を変えた・消したときはProxyJumpも(踏み台にしている接続先) |
| ネットワークがありません | ネットワークに接続できません。回線を確認してください。 | このマシンの回線 |
| 接続先に届きません | 接続先まで届きません。ネットワークと接続先の電源を確認してください。 | ネットワークのルート、VPN |
| 接続先が切断しました | 接続先が接続を切りました。接続先のSSHサーバーの状態を確認してください。 | 接続先のSSHサーバーのログ |
| ホスト鍵が変わりました | ホスト鍵が変わりました。Known Hostsを確認してから接続し直してください。 | Known Hostsで、変わった理由 |
| ホスト鍵を受け入れていません | known_hostsに無い鍵、受け入れなかった鍵、失効済みの鍵 | Known Hosts |
| 認証できませんでした | パスワード、鍵、パスフレーズが通らなかった | Connectionsの認証の設定 |
| 切断・再接続できませんでした | 自動の再接続を上限まで試した | 上の理由を直してから[再接続] |
次の場合は、上の文に補足が付きます。
- 踏み台(
ProxyJumpの途中)で失敗したとき: 文の前に、どの踏み台の何段目か(例: 踏み台のjump(1/2)に接続できませんでした。)が付きます。確かめるのは、その踏み台です。 - 打ったパスワードが違うとき: 次の問いの前に、OpenSSHと同じ
Permission denied, please try again.が出ます。 - 自動の再接続の途中でパスワードなどを待っているとき: 見出しと行に「再接続中(4/5)・入力待ち」と出ます。ターミナルで入力してください。
IdentityFileの鍵が使われない
IdentityFileに次の形の値を書いた鍵は、接続で使いません。
id_workのような相対パス~other/...のような、ほかのユーザーのホームフォルダ%Tのような、sshcが展開しないトークン- 値の無い環境変数を指す
${NAME}
以前のバージョンのsshcは相対パスをホームフォルダから開いていたため、IdentityFile id_workのような設定では、更新後に公開鍵認証が失敗することがあります。~/.ssh/id_workのように、~から始まるパスか絶対パスに書き直してください。どの鍵を使わなかったかは、[Settings]→[Terminal]の[接続のログ]を[鍵・経由ホスト・所要時間(-vv)]以上にすると確認できます。展開する形と使わない形はSSH鍵とKnown Hostsに記載しています。
ProxyJumpでパスワードを求められる
非対話SSHやSFTPで接続する場合は、最終接続先だけでなく、各踏み台に必要なパスワードまたは鍵のパスフレーズも保存してください。Connectionsの認証テストで、どの接続先が失敗したかを確認できます。2FAなど保存済みの認証情報だけでは完了できない接続は、対話Terminalから開いて追加入力します。
macOSでダウンロードなどのフォルダを開けない
sshcエンジン側のファイルを開いたペインで、ダウンロード、書類、デスクトップなどのフォルダを開いたり、そこへ転送したりすると、macOSのプライバシー保護によりアクセスできないと表示されることがあります(sftp_local_privacy_protection)。macOSは、許可していないプロセスにこれらのフォルダを読み書きさせないためです。次の手順でsshcを許可してください。
- システム設定の[プライバシーとセキュリティ]→[フルディスクアクセス]を開きます。
- 一覧の下の[+]を押し、⌘⇧Gでsshcの実行ファイルのパスを入力して追加します。Homebrewで入れた場合は
/opt/homebrew/opt/sshc/bin/sshc(Intel Macでは/usr/local/opt/sshc/bin/sshc)、install.shで入れた場合は~/.local/bin/sshcです。 - sshcエンジンを再起動します。
sshc service installで登録した稼働中のサービスはsshc service restartで、それ以外のsshcエンジンはsshc engine --replaceで再起動します。パスワードを設定したVaultは再起動でロックされるため、sshc vault unlockでロックを解除してください。
sshc service restart
sshc vault unlockフルディスクアクセスは、これらのフォルダだけでなく、ディスク全体の読み書きを許可します。[プライバシーとセキュリティ]→[ファイルとフォルダ]にsshcが表示されている場合は、そこで使うフォルダだけを許可することもできます。
ターミナルでsshc engineを実行している場合は、sshcではなく、そのターミナルのアプリ(ターミナル、iTerm2など)を許可してください。
sshcの実行ファイルにはApple Developer IDの署名が無いため、sshcを更新すると許可が外れることがあります。その場合は、一覧のsshcを[-]で削除してから、もう一度追加してください。
Syncが進まない
sshc sync
sshc sync nowVaultのロックが解除されているか、同期方向が合っているか、バケットの状態が最新か、最後の確認がいつ行われたかを確認してください。outcome_unknownは、変更を送信したものの、結果を確定できなかった状態です。同じ操作をすぐに繰り返さず、リモートの状態を更新してから判断してください。
同期エラーには、画面上の原因説明が表示されます。[詳しく]を開くと、次の表のエラーコードを確認できます。
| エラーコード | 意味と主な原因 | 確認箇所と対処 |
|---|---|---|
bucket_authentication_failed | Access Key IDまたはSecret Access Keyが無効か、認証に失敗した | S3の認証情報を入力し直す |
bucket_access_denied | 保存先がHTTP 403を返した。権限不足または署名不一致 | バケット名、リージョン、S3アクセスキーのオブジェクト読み書き権限を確認する |
bucket_rate_limited | 保存先が要求数を制限している | 時間を置いて再実行する |
bucket_unavailable | 保存先で一時的な障害が発生している | 保存先の状態を確認し、復旧後に再実行する |
bucket_refused | 保存先が要求を拒否したが、原因を分類できない | S3の認証情報、リージョン、アクセス権限を確認する |
bucket_dns_failed | エンドポイントの名前解決に失敗した | エンドポイントとDNS設定を確認する |
bucket_tls_failed | HTTPS証明書を検証できない | 証明書とこのマシンの時刻を確認する |
bucket_timeout / bucket_unreachable | 保存先へ到達できない | ネットワーク、VPN、ファイアウォールを確認する |
endpoint_must_be_https / endpoint_must_have_no_path | エンドポイントがhttps://で始まっていない、またはバケット名やパスを含んでいる | エンドポイントにはhttps://で始まるアカウントのURLだけを指定し、バケット名は[バケット名]に入力する |
unsafe_bucket_name / unsafe_object_path | バケット名、またはバケット内のパスに使用できない文字がある | 英数字、ハイフン、ピリオド、アンダースコアだけで入力する |
sync_push_refused / sync_apply_refused | 同期の方向が「受信のみ」のマシンで送信した、または「送信のみ」のマシンで適用した | [同期の方向]を変更する |
wrong_passphrase | 同じ保存先を使うマシンの暗号化キーが一致していない | 最初のマシンで保管した暗号化キーを設定し直す |
sync_settings_export_rejected | 取り込んだファイルやQRコードが、sshcで書き出した同期設定として読み取れない | 設定済みのマシンで、同期設定をもう一度書き出す |
sync_setup_target_empty | 書き出した同期設定の保存先に同期データがない。書き出したあとで保存先を空にしたか、別の保存先へ変更した | 設定済みのマシンで、同期設定をもう一度書き出す |
passphrase_too_short | 入力した暗号化キーが12文字未満 | sshcが生成した暗号化キーを使う |
snapshot_schema_unsupported | リモートのスナップショットが、このバージョンのsshcでは読み込めない形式(v6より古い、または新しい) | 新しい形式なら、同じ保存先を使うすべてのマシンを同じバージョンへ更新する。古い形式なら、送信できるマシンからForce Pushで上書きする |
snapshot_rejected | スナップショットを復号できたが、内容の検証に失敗した(破損、または改ざん)。前のバージョンのsshcがLinuxやmacOSから送ったスナップショットに、:や?などWindowsのファイル名に使えない文字を含む名前のファイルがある場合も、この表示になる | 履歴から別のスナップショットを復元するか、送信できるマシンからpushし直す。名前が原因なら、送ったマシンのsshcを更新してpushし、sync_local_path_unportableに表示されたファイルの名前を変更してから、もう一度pushする |
snapshot_download_incomplete / snapshot_too_large | ダウンロードが途中で切れた、または上限(128 MiB)を超えた | ネットワークを確認し、同期対象から大きなファイルを除外する |
sync_remote_moved | 別のマシンが先にpushしていて、確認したスナップショットと一致しない | 最新の状態を取り込んでから再実行する |
sync_remote_deleted | 同期済みのリモートが削除されている | 保存先を確認し、送信できるマシンからpushし直す |
sync_local_path_unportable | 送る対象のファイルに、ほかのマシンで同じ名前として扱えない名前がある(Windowsの予約名、:や?などWindowsのファイル名に使えない文字を含む名前、末尾がピリオドか空白の名前、大文字と小文字だけが違う名前など)。画面にはそのファイルのパスが表示される | ファイルの名前を変更するか、[同期するファイル]で除外する |
preview_stale / sync_local_changed | プレビュー後にリモートまたはローカルが変わった | もう一度[変更を確認]してから適用する |
sync_conflicts | ローカルとリモートの両方が変わっていて、自動でマージできない | 「このマシンの内容を残す」か「他のマシンの内容を使用」を選ぶ |
sync_internal_failed | 原因を分類できない内部エラー | 表示された診断コードを添えて報告する |