我想通过脚本将用户添加到 Linux 系统,但我不想发明或关心密码。这应该自动完成。
目标是生成 ssh 密钥,此用户只需远程登录即可。或者,此用户将通过 sudo 用户使用sudo su - thatuser
。
我希望省去每次创建这样的用户时发明和输入安全密码的麻烦,并且可以通过脚本来执行此操作。
没有人能够以该用户的身份使用密码登录,因此我的想法是他获得一个很好的随机密码,但没人知道它。
我可以编写一个脚本来生成一些随机的东西,但也许有内置的东西?或者只是停用密码(这样就无法使用密码登录,但使用密钥进行 ssh 登录可以sudo su - thatuser
正常工作。
编辑:已经有一些答案了,很好,但我仍然不确定该怎么做。脚本会是什么样子?
它的行为应类似于 adduser 并创建所有标准内容(如 std.home 目录、复制的骨架、同名的组)
编辑2:最后,在您的帮助下,我找到了一个可行的解决方案,我想与大家分享。这是一个我称之为“adduser-nopasswd”的脚本,我将其放入 /usr/local/sbin(这是一个好地方吗?),并且只能由 root 执行。它接受一个参数,即新组和用户的名称:
#!/bin/sh -e
# the -e makes the script exit immediateley if one command fails
NAME=$1
groupadd $NAME
useradd --create-home -d /home/$NAME --shell /bin/bash -g $NAME $NAME
对此功能有什么评论吗?
答案1
如果您没有指定密码,则useradd
不会设置密码(因此用户将无法通过密码登录)。请注意useradd
和adduser
是两个不同的命令。
以下应该创建具有自己组的新用户,创建它的主目录(在默认位置,因为我们没有指定任何位置)并复制骨架文件。
useradd --create-home <user>
.ssh
然后,您只需在其主目录中创建目录chmod
即可0700
(SSH 将需要这个以确保安全),并将用户公钥放入其中.ssh/authorized_keys
(私钥/公钥对应由用户自己在自己的计算机上生成)。
如果您想禁用已存在帐户的密码,可以使用以下命令。
usermod --lock <user>
答案2
实用程序 /usr/sbin/useradd 总是能为我创建用户而无需密码。我编写了许多脚本,它们使用其他系统的 /etc/passwd 为我创建用户。
或者,如果您查看 mercurial-server 的文档,您将看到如何设置多个 SSH 密钥(客户端)以在服务器端以一个用户身份运行程序。
答案3
# cat user-pw_list
john:p455W0rD
geany:p455W0rD
# cat CreateUsers.sh
#!/bin/bash
#
# filename: CreateUsers.sh
# usage: cat "User:passwd" | $0
#
set -e
# set -x
while read ; do
USER=${REPLY%%:*}
PWD=${REPLY##*:}
# alternative for random passwd, where $RANDOM is a bash function
#PWD=${REPLY%%:*}$RANDOM$RANDOM
echo -e "adding User $USER "
# for disabled users: /usr/sbin/nologin, otherwise /bin/bash
/usr/sbin/useradd -c automaticUser -m -k/dev/null -s /usr/sbin/nologin $USER
echo "$USER:$PWD" | chpasswd --md5 $USER
## also add user to samba:
#echo -e "$PWD\n$PWD" | pdbedit -t -u $USER
done
好的,让我们添加用户:
cat user-pw_list | ./CreateUsers.sh
答案4
在 /etc/shadow 中的密码字段中输入 *(如果您未设置密码,则会发生这种情况)。这将阻止用户登录。