Troubleshooting

Most failures fall into a small number of buckets. This page maps symptom to likely cause to fix.

Connect fails immediately

SymptomCauseFix
Permission denied (publickey)SSH auth wrongVerify the key matches a line in remote ~/.ssh/authorized_keys; ssh -i <key> user@host from a terminal first
Host key verification failedPlugin known-host store rejectedOpen settings → trust dialog. If a known host changed, see Host-key trust
Connection refusedsshd not listeningVerify the port; nc -zv <host> <port> to confirm reachability
Connection timeoutNetwork / firewallSame hop reachable via ping? sshd port open in firewall?
Daemon failed to start (after binary upload)Daemon crashed at startupSee Daemon won’t start below

Daemon won’t start

Check the daemon log: SettingsDaemon → “View log”, or directly:

ssh user@host 'cat ~/.obsidian-remote/server.log'

Common patterns:

  • permission denied opening the socket → check ~/.obsidian-remote/ exists with the right ownership; recreate with mkdir -p ~/.obsidian-remote && chmod 700 ~/.obsidian-remote.
  • bind: address already in use on the socket → another daemon is already running. Kill it (pkill -f obsidian-remote-server) or pick a different socket path in the profile.
  • vault root does not exist → set the profile’s “Remote vault path” to a path that exists; the daemon won’t create it.
  • inotify_add_watch: too many open files → raise fs.inotify.max_user_watches (see fs.watch caveats).

Files don’t sync

SymptomCauseFix
Local edits don’t appear on remotePlugin write is failing silently — open developer console (Cmd+Opt+I / Ctrl+Shift+I), look for [remote-ssh] errorsOften a permission issue on the remote vault dir
Remote edits don’t appear locallyfs.watch subscription not active, or hit the inotify watch limitSettings → Daemon → Restart; raise fs.inotify.max_user_watches (see fs.watch caveats)
Specific file always conflictsTwo-way edit collisionSee Conflict handling
Big binary files take foreverPlugin downloads on-demand; first open is slowExpected — local cache survives across reopens

Performance feels slow

Likely culprits, in order of frequency:

  1. High SSH latencyping <host> to estimate RTT. Per-RPC RTT is roughly 2× ping. Anything > 50 ms makes typing feel laggy.
  2. inotify limits — daemon can’t subscribe to all dirs. Symptom: remote edits delay until you switch focus. Fix per fs.watch.
  3. Vault on slow disk (SD card on Pi) — fs.walk cold-cache is the slowest op. Move to USB SSD if possible.
  4. First connect on a new host — binary upload is one-time, ~5 MB. Subsequent connects skip it.

For deep perf debug: enable Debug logging and check <plugin>/console.log (rotated console.log + .1 + .2 + .3) for per-op timings.

The full perf-tuning playbook (network / disk / inotify / daemon-side cache, with measurement commands) lives at Performance tuning.

How to ask for help

When opening an issue, paste:

  1. Plugin version: Settings → Community plugins → “Remote SSH” entry shows the version.
  2. Daemon version: Settings → Daemon panel → status badge.
  3. Plugin log (last 50 lines from <vault>/.obsidian/plugins/remote-ssh/console.log).
  4. Daemon log (last 50 lines from ~/.obsidian-remote/server.log).
  5. Local OS + remote OS / arch (uname -a on remote).
  6. What you expected vs what happened.

Issues at: github.com/sotashimozono/obsidian-remote-ssh/issues.

Next: Logs & telemetry.