Octoprint user import


#1

Is it at all possible to automatically sync user profiles across multiple octoprint instances? We are using octoprint as a way to control which uses which printer but we want to avoid having to type everybody's username and password 3 separate times during a class of 6-10. Any insight would be extremely helpful

Make717 innovation center 3D printing area
make717.org


#2

If I were you, I think I would create a bash script that creates all the users, put this on a USB drive and then run it once per printer instance.

I'm guessing that OctoPrint uses the native Linux user/group/password mechanism so hopefully anyone can correct me if I'm wrong. /BadAdvice

You could also easily use scp to copy the script sideways. You could also use ssh to remotely run commands in batch to all three printers; creating a script on your own workstation. See here for details. /BadAdvice

I haven't tried the following script so maybe it would need some tweaking. I'm just writing it out of my head, so-to-speak. You would run this on your workstation. /BadAdvice

create-users.sh

#!/bin/sh
for s in huey duey louie
do
  echo "Setting up $s..."
  bash="/bin/bash"
  username="tom"
  group="somegroup"
  password="raspberry"
  homedir="/home/$username"
  ssh -t pi@$s.local "useradd -g $group -s $bash -d $homedir -m $username"
  ssh -t pi@$s.local "echo $password | passwd $username --stdin"
  # Repeat for other users like this...
  username="dick"
  password="raspberry"
  homedir="/home/$username"
  ssh -t pi@$s.local "useradd -g $group -s $bash -d $homedir -m $username"
  ssh -t pi@$s.local "echo $password | passwd $username --stdin"
  username="harry"
  password="raspberry"
  homedir="/home/$username"
  ssh -t pi@$s.local "useradd -g $group -s $bash -d $homedir -m $username"
  ssh -t pi@$s.local "echo $password | passwd $username --stdin"
done

Make sure to mark the script on your own workstation as executable. /BadAdvice


#3

Have a look at accessControl configuration in the docs. User accounts are configured in a separate yaml file, defaulting to users.yaml in your configuration directory. I haven't tried this (sorry, don't have access control turned on my instance at all), but you can probably just sync this file across your instances to get user accounts going everywhere.

Automating copying that across all of your instances could happen in a few ways. A barebones method would be a script running periodically on a "primary" instance that uses rsync to update the other secondary ones. Or you could use a shared volume, either in-house with samba or external with dropbox or similar.