Units run under 'systemctl --user' belong to the user's systemd instance, which is started when the first session opens and stopped when the last one closes. A timer or long-running service set up over SSH therefore dies the moment the SSH session ends, which looks like the unit crashing.
Enable persistence with 'loginctl enable-linger USERNAME', run as root or by the user themselves where policy allows. Lingering starts the user manager at boot and keeps it running with no session attached. Check the state with 'loginctl show-user USERNAME --property=Linger'.
Two related surprises. KillUserProcesses in logind.conf controls whether ordinary background processes such as nohup and screen survive logout, and it defaults to no, so they do survive; distributions occasionally flip it. And a lingering user manager runs without the environment of a login shell, so PATH and any variables set in .bashrc are absent; user units must declare what they need with Environment or EnvironmentFile, and 'systemctl --user import-environment' only copies what exists at the moment it runs.