非交互方式运行 adduser

非交互方式运行 adduser

我想使用该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:登录用户的默认 shell

    SHELL空白将使用变量指定的默认登录 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 中进行完全无头设置。

相关内容