非交互式运行adduser


198

我想使用该adduser命令通过Shell脚本添加用户(具有禁用的密码)。

默认情况下,adduser提示您输入各种值(例如,全名)。有什么办法可以通过命令行提交这些值?还是我需要useradd代替?

Answers:


262

使用该--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 详细信息-Wikipedia

希望这对您有帮助。


41

useradd 也可以添加用户,并且似乎没有内置任何形式的提示。

useradd -m -p <encryptedPassword> -s /bin/bash <user>
  • -m--create-home:创建用户主目录
  • -p--password:指定用户密码;跳过以禁用它
  • -s--shell:登录用户的默认外壳

    空白将使用由中的SHELL变量指定的默认登录外壳/etc/default/useradd

  • <user>用登录名代替
  • <encryptedPassword>加密的密码代替

生成哈希密码:

许多可以生成哈希密码的crypt3实现。整个过程就是您的哈希密码。

基于Sha-512

结果输出格式:哈希机制($6对于sha-512),随机盐(第二个美元符号后的八个字节$ASDF1234),其余部分为有效负载。

  • mkpasswd mkpasswd -m sha-512

    mkpasswdwhois包装提供)

基于DES:

结果输出格式:前2个字节是您的盐,其余部分是有效负载。整个过程就是您的哈希密码。

  • mkpasswd :(mkpasswdwhois软件包提供)
  • openssl: openssl passwd -crypt
  • perl: perl -e "print crypt('password');"
  • 蟒蛇: python3 -c 'import crypt; print(crypt.crypt("password"))'

1
您提到的选项adduser在我的(最新)Ubuntu版本中不存在。
ᴠɪɴᴄᴇɴᴛ

1
@ᴠɪɴᴄᴇɴᴛ adduser与截然不同useradd,我知道。
ThorSummoner

1
糟糕,确实错过了您几乎使用它的名字的含义...难道没有BDFL保护命令行名称空间吗?; p
ᴠɪɴᴄᴇɴᴛ

1
@ mum007这只是一般建议,请尝试在您的ssh命令中添加-v-vv-vvv,以查看出了什么问题并在SO或Google上搜索错误消息。
ThorSummoner 2015年

1
@KovacsAkos试试这个:sudo sed -i"" -e "s/PasswordAuthentication no/PasswordAuthentication yes/" /etc/ssh/sshd_configsudo service ssh restart
巴赫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.