【问题标题】:Useradd script in linux without using passwdlinux中的useradd脚本不使用passwd
【发布时间】:2021-08-19 14:05:33
【问题描述】:

我必须编写一个 useradd 脚本,它会添加一个新用户并为他设置一个主目录。

#!/bin/bash

echo "Name:"
read name
echo "Password:"
read password
echo "Group:"
read group
useradd -m -G $group -s /bin/bash -p $password $name

一切都按预期工作,但我在以下行中的密码有问题 -

useradd -m -G $group -s /bin/bash -p $password $name

它不起作用,所以我需要稍后在终端 passwd 命令中使用。

如何重建我的脚本,这样我就不需要使用passwd 来正确设置密码?我读到您可以使用标准输入,但我无法正确执行此操作。

【问题讨论】:

  • 您尝试使用的方法需要加密密码作为参数。从手册页-pThe encrypted password, as returned by crypt(3)。您可以使用chpasswd 批量更新密码。
  • 我怎样才能将它添加到我的代码中?我尝试使用 ' echo "password:name" | chpasswd' 而不是 echo "Password",我最后尝试执行相同的代码行,但它不起作用。

标签: linux bash passwords


【解决方案1】:

如果您更喜欢从STDIN 传输用户密码,请使用快速简单的chpasswd 实用程序。 正如@Ardit所建议的那样。

假设您满足以下条件,此脚本应该可以满足您的目的-

  • 您正在以 root 用户 的身份进行交互
  • 您已经为新用户创建了一个现有组
#!/bin/bash

echo "Name:"
read name

echo "Password:"
read password

echo "Group:"   # group must exist
read group

# add new user, set group, create new home directory 
useradd -G $group -m $name           

# update new user password by piping from STDIN
echo ""$name":"$password"" | chpasswd           

# change the default user shell to bash 
chsh -s /bin/bash $name         
  1. 首先我们执行useradd 命令来创建新用户并将其分配到现有组。
  2. 然后我们将用户名和密码管道输入chpasswd。如果您想知道为什么要用双引号括起这些变量扩展,check this answer out
  3. 最后chsh 实用程序用于更新用户shell。

为什么不在一条语句中执行所有内容?
我更喜欢将问题细分为更小的任务以便于理解。

【讨论】:

  • Tkank 非常感谢它按预期工作,感谢您的详细解释。
猜你喜欢
  • 2019-06-26
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
相关资源
最近更新 更多