Run adduser non-interactively
Solution 1:
Use the --gecos
option to skip the chfn
interactive part.
adduser --disabled-password --gecos "" username
It's all in the man page. Not the most obvious formulation tho.
--gecos GECOS
Set the gecos field for the new entry generated. adduser will
not ask for finger information if this option is given.
The GECOS field is a comma separated list as such: Full name,Room number,Work phone,Home phone
, despite that man page mentions finger information
Details - Wikipedia
Hope this helps you.
Solution 2:
useradd
can also add users and does not appear to have any form of prompting built in.
useradd -m -p <encryptedPassword> -s /bin/bash <user>
-
-m
,--create-home
: Create user home directory -
-p
,--password
: Specify user password; skip to have it disabled -
-s
,--shell
: Default shell for logon userBlank will use default login shell specified by the
SHELL
variable in/etc/default/useradd
- Substitute
<user>
with the login name - Substitute
<encryptedPassword>
with the encrypted password
Generating a hashed password:
There are a lot of crypt3 implementations that can generate a hashed password. The whole thing is your hashed password.
Sha-512 Based
The resulting output format: the hash mechanism ($6
for sha-512), the random salt (the eight bytes after the second dollar sign $ASDF1234
), remainder is the payload.
-
mkpasswd
mkpasswd -m sha-512
(
mkpasswd
is provided by thewhois
package)
DES based:
The resulting output format: first 2 bytes is your salt, remainder is the payload. The whole thing is your hashed password.
- mkpasswd:
mkpasswd
(provided bywhois
package) - openssl:
openssl passwd -crypt
- perl:
perl -e "print crypt('password');"
- python:
python3 -c 'import crypt; print(crypt.crypt("password"))'
Solution 3:
You can combine what @ThorSummoner @Zoke are saying like so:
username=jovyan
password=jovyan
adduser --gecos "" --disabled-password $username
chpasswd <<<"$username:$password"
I'm doing this for my Jupyter docker-stack. It allows full headless setup in a Dockerfile.