我想使用该adduser
命令通过 shell 脚本添加用户(已禁用密码)。
默认情况下,adduser
会提示您输入各种值(例如,全名)。有没有办法通过命令行提交这些值?或者我需要这样做吗useradd
?
答案1
使用该--gecos
选项可以跳过chfn
交互部分。
adduser --disabled-password --gecos "" username
一切都在手册页中。不过这不是最明显的表述。
--gecos GECOS
Set the gecos field for the new entry generated. adduser will
not ask for finger information if this option is given.
GECOS 字段是一个逗号分隔的列表,如下所示:Full name,Room number,Work phone,Home phone
,尽管手册页提到finger information
详情 - 维基百科
希望这对你有帮助。
更新:对于较新(或即将推出)的版本adduser
,该--gecos
选项已被替换--comment
。
--comment comment
Set the comment field for the new entry generated. adduser will
not ask for the information if this option is given. This field
is also known under the name GECOS field and contains informa‐
tion that is used by the finger command. This used to be the
--gecos option, which is deprecated and will be removed after
Debian bookworm. Valid Modes: adduser, adduser --system.
答案2
useradd
还可以添加用户,但似乎没有内置任何形式的提示。
useradd -m -p <encryptedPassword> -s /bin/bash <user>
-m
,--create-home
:创建用户主目录-p
,--password
:指定用户密码;跳过禁用它-s
,--shell
:登录用户的默认 shellSHELL
空白将使用变量指定的默认登录 shell/etc/default/useradd
<user>
用登录名替换- 替换
<encryptedPassword>
为加密密码
生成散列密码:
有很多crypt3 实现可以生成散列密码。整个内容就是您的散列密码。
基于Sha-512
得到的输出格式为:哈希机制($6
针对 sha-512)、随机盐(第二个美元符号后的八个字节$ASDF1234
)、余数是有效载荷。
创建密码
mkpasswd -m sha-512
(
mkpasswd
由包裹提供whois
)
基于DES:
最终的输出格式:前 2 个字节是您的盐,其余部分是有效载荷。整个内容是您的哈希密码。
- mkpasswd:(
mkpasswd
由包提供whois
) - openssl:
openssl passwd -crypt
- perl:
perl -e "print crypt('password');"
- Python:
python3 -c 'import crypt; print(crypt.crypt("password"))'
答案3
你可以结合@ThorSummoner @Zoke 所说的内容,如下所示:
username=jovyan
password=jovyan
adduser --gecos "" --disabled-password $username
chpasswd <<<"$username:$password"
我正在为我的 Jupyter docker-stack 做这件事。它允许在 Dockerfile 中进行完全无头设置。