Duplicati & Jottacloud: 401 Unauthorized error

Hi - been struggling to get Duplicati & Jottacloud working together for ages. I’m sure it’s something on my side, but I cant see it.

$ uname -a
Linux redacted 4.19.75-v7+ #1270 SMP Tue Sep 24 18:45:11 BST 2019 armv7l GNU/Linux
$ mono --version
Mono JIT compiler version 5.18.0.240 (Debian 5.18.0.240+dfsg-3 Sat Apr 20 05:16:08 UTC 2019)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS:
SIGSEGV: normal
Notifications: epoll
Architecture: armel,vfp+hard
Disabled: none
Misc: softdebug
Interpreter: yes
LLVM: supported, not enabled.
Suspend: preemptive
GC: sgen (concurrent by default)
$ sudo mono /usr/lib/duplicati/Duplicati.CommandLine.exe backup “jottacloud://OS_backups” --auth-username=“red@act.ed” --auth-password=“redacted” /mnt/sda/backups/ --send-mail-any-operation=true --send-mail-body=“%RESULT%” --send-mail-from=“re@act.ed” --send-mail-level=all --send-mail-password=“redacted” --send-mail-result-output-format=Duplicati --send-mail-subject=“Duplicati %OPERATIONNAME% report for %backup-name%” --send-mail-to=“red@act.ed” --send-mail-url=smtps://mailhost:465 --send-mail-username=user --throttle-download=2MB --throttle-upload=4MB --concurrency-max-threads=3 --backup-name=“OS backups” --dbpath=/root/.config/Duplicati/82899076696782697576.sqlite --encryption-module=aes --compression-module=zip --dblock-size=50mb --passphrase=redacted --disable-module=console-password-input --accept-any-ssl-certificate
Backup started at 12/2/2019 7:58:58 AM
Checking remote backup …
Listing remote folder …
Listing remote folder …
Listing remote folder …
Listing remote folder …
Listing remote folder …
Fatal error => The remote server returned an error: (401) Unauthorized.

System.Net.WebException: The remote server returned an error: (401) Unauthorized.
at System.Net.HttpWebRequest.GetResponseFromData (System.Net.WebResponseStream stream, System.Threading.CancellationToken cancellationToken) [0x0017e] in :0
at System.Net.HttpWebRequest.RunWithTimeoutWorker[T] (System.Threading.Tasks.Task1[TResult] workerTask, System.Int32 timeout, System.Action abort, System.Func1[TResult] aborted, System.Threading.CancellationTokenSource cts) [0x00118] in :0
at Duplicati.Library.Main.BackendManager.List () [0x00049] in :0

at Duplicati.Library.Main.Operation.FilelistProcessor.RemoteListAnalysis (Duplicati.Library.Main.BackendManager backend, Duplicati.Library.Main.Options options, Duplicati.Library.Main.Database.LocalDatabase database, Duplicati.Library.Main.IBackendWriter log, System.String protectedfile) [0x0000d] in :0
at Duplicati.Library.Main.Operation.FilelistProcessor.VerifyRemoteList (Duplicati.Library.Main.BackendManager backend, Duplicati.Library.Main.Options options, Duplicati.Library.Main.Database.LocalDatabase database, Duplicati.Library.Main.IBackendWriter log, System.String protectedfile) [0x00000] in :0
at Duplicati.Library.Main.Operation.BackupHandler.PreBackupVerify (Duplicati.Library.Main.BackendManager backend, System.String protectedfile) [0x0010d] in :0
at Duplicati.Library.Main.Operation.BackupHandler.RunAsync (System.String sources, Duplicati.Library.Utility.IFilter filter) [0x01031] in :0
at CoCoL.ChannelExtensions.WaitForTaskOrThrow (System.Threading.Tasks.Task task) [0x00050] in <6973ce2780de4b28aaa2c5ffc59993b1>:0
at Duplicati.Library.Main.Operation.BackupHandler.Run (System.String sources, Duplicati.Library.Utility.IFilter filter) [0x00008] in :0
at Duplicati.Library.Main.Controller+<>c__DisplayClass13_0.b__0 (Duplicati.Library.Main.BackupResults result) [0x00035] in :0
at Duplicati.Library.Main.Controller.RunAction[T] (T result, System.String& paths, Duplicati.Library.Utility.IFilter& filter, System.Action1[T] method) [0x00271] in <e2da9713f0974e76879d9f9aa7ce0e36>:0 at Duplicati.Library.Main.Controller.Backup (System.String[] inputsources, Duplicati.Library.Utility.IFilter filter) [0x00068] in <e2da9713f0974e76879d9f9aa7ce0e36>:0 at Duplicati.CommandLine.Commands.Backup (System.IO.TextWriter outwriter, System.Action1[T] setup, System.Collections.Generic.List1[T] args, System.Collections.Generic.Dictionary2[TKey,TValue] options, Duplicati.Library.Utility.IFilter filter) [0x00119] in :0
at (wrapper delegate-invoke) System.Func6[System.IO.TextWriter,System.Action1[Duplicati.Library.Main.Controller],System.Collections.Generic.List1[System.String],System.Collections.Generic.Dictionary2[System.String,System.String],Duplicati.Library.Utility.IFilter,System.Int32].invoke_TResult_T1_T2_T3_T4_T5(System.IO.TextWriter,System.Action1<Duplicati.Library.Main.Controller>,System.Collections.Generic.List1,System.Collections.Generic.Dictionary2<string, string>,Duplicati.Library.Utility.IFilter) at Duplicati.CommandLine.Program.ParseCommandLine (System.IO.TextWriter outwriter, System.Action1[T] setup, System.Boolean& verboseErrors, System.String args) [0x00313] in :0
at Duplicati.CommandLine.Program.RunCommandLine (System.IO.TextWriter outwriter, System.IO.TextWriter errwriter, System.Action`1[T] setup, System.String args) [0x00002] in :0

See this topic: Jottacloud Error 401 (Unauthorized)

Go to https://www.jottacloud.com/web/account, make sure you are logged in, view the source and scroll all the way down. There you can find your user_id. Use that ID as user name in Duplicati.

Thanks. I originally had auth-username as email; I changed it to the contents of the Intercom user_id and I get the same error.

On a gamble, I changed auth-password to match user_hash in the same Intercom section - still the same error.

Any other ideas?

You can verify the user id login via web:

interestingly, the user_id fails with both my normal password and my user_hash.

I am utterly befuddled.

Perhaps you’ve enabled two-factor authentication?

Nope, TFA is not enabled…