通过bash脚本添加用户帐户的正确方法

这是我现在使用的脚本代码:

getent group $MYGROUP if [ $? -ne 0 ] ; then sudo su -c "groupadd $MYGROUP" fi sudo su -c "useradd mynewuser -p mypassword -m -g $PRIMARYGRP -G $MYGROUP" 

这种方法在openSuse上运行良好。 但是它在Ubuntu上创建的用户帐户存在一些问题,所以我在这里寻求帮助。

  • 未设置终端提示( echo $PS1返回任何内容)
  • 箭头键和标签键在终端中无法正常工作
  • 密码似乎不起作用(虽然我还不清楚这个问题到底是什么)
  • 为这个新用户设置的/ etc / sudoers权限不受尊重

如果我用adduser手动创建用户(而不是useradd)我在Ubuntu上没有这些问题。 但我不能在openSuse(afaik)上使用adduser 。 因此,我需要一个非Debian独占的脚本或通过我的bash脚本添加用户帐户的方法,该脚本适用于Ubuntu(并且不会停止处理其他发行版)。

最后,我想了解adduseruseradd之间的区别 。 例如,我想知道adduser使用哪个骨架目录,因为这可能是useradd未按预期工作的原因(因为我刚刚接受了默认值)。

谢谢

我的解决方案在这里提供: https : //unix.stackexchange.com/questions/82923/proper-way-to-add-a-user-account-via-bash-script,Ulrich Schwarz和Joseph R. 我要做的主要是将-s /bin/bash添加到我现有的useradd命令中并删除需要加密密码的-p password密码。

 sudo su -c "useradd mynewuser -s /bin/bash -m -g $PRIMARYGRP -G $MYGROUP" 

然后这样做:

 sudo chpasswd << 'END' mynewuser:password END 

这会奏效。

 sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password echo "myuser:password" | sudo chpasswd 

我的脚本使用ssh密钥登录自动构建服务帐户而没有密码

 #add service group/user addgroup service-runner useradd devops-service --create-home --shell /bin/bash --groups service-runner #gpasswd -a devops-service sudo #allowing sudo requires password, and not a good idea for a service account. mkdir /home/devops-service/.ssh chmod 700 /home/devops-service/.ssh cat devops-service@v2-20150312.pub >> /home/devops-service/.ssh/authorized_keys chown devops-service:devops-service /home/devops-service -R 

我想你可以简单地在你的脚本中使用一个条件,比如

 if grep -q 'Ubuntu\|Debian' /etc/issue; then adduser ..... else useradd ..... fi 

(无法validationOpenSUSE /etc/issue是否存在文件/etc/issue ,否则可以将条件存在于此类文件中)。