通过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(并且不会停止处理其他发行版)。
最后,我想了解adduser
和useradd
之间的区别 。 例如,我想知道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
,否则可以将条件存在于此类文件中)。