目前,我只需前往我们的每台服务器输入
adduser <username> --firstuid 1101 --gid 1001 --disabled-password
添加用户。有没有更快的方法同时在所有服务器上执行此操作?谢谢。
更新:
运行上述命令后,需要填写一些用户信息:“全名:”、“房间号”、“工作电话”等。我希望只填写一次这些信息,并将其用于所有机器上的用户创建。谢谢。
答案1
更新
我不确定你是否需要添加相同的是将用户分配到每台服务器,还是每台服务器都有自己的用户。我将针对这两种情况为您提供解决方案。
向每台服务器添加用户列表
最适合此工作的工具是newusers
。您需要创建一个包含用户列表及其详细信息的文本文件。如果您想添加相同的每个服务器的用户,这个文件只需要一行。
创建用户列表。该文件的一般格式为
username:passwd:UID:GID:full name,room number,work phone,home phone,other:directory:shell
因此,就你的情况而言,你需要使用类似
tom:password1:::"Tom Hanks","101","123456","654321","Tall":: danny:password2:::"Danny DeVito","102","222333","333222","Short"::
请注意,我将 UID、GUID、目录和 shell 选项留空。这意味着将使用默认值。
现在您已经创建了列表,您需要将其复制到每台远程计算机,然后添加新用户。为此,您仍然需要一个相关主机名或 IP 的列表,每行一个,就像我之前的建议一样。完成所有这些设置后,将此小脚本保存为
newusers.sh
:#!/bin/bash while read ip; do scp users.txt root@$ip:/home/root ssh root@$ip newusers users.txt done
使脚本可执行(
chmod a+x newusers.sh
)并对文件中的每个 IP 运行它:newusers.sh < IPs.txt
如果您设置了无密码 ssh,这一切都会变得容易得多。如果没有,请运行以下命令以使用允许无密码访问的 ssh 密钥(您仍然需要密码):
ssh-keygen -t rsa while read ip; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$ip; done < IPs.txt
向每台服务器添加不同的用户
在这种情况下,我会创建一个略有不同的文件。它应该在每一行上包含 IP 或主机名、其对应的用户以及创建她所需的详细信息。假设您想要设置密码,您可以将纯文本(显然这里存在一些安全问题,不知道它们是否与您的情况有关)密码作为第四个字段。此外,为了正确解析带有空格的名称,确保使用非空格字符作为字段分隔符。在下面的例子中,我使用-
:
192.168.1.10-tom-"Tom Hanks","101","123456","654321","Tall"-pass1
192.168.1.10-danny-"Danny DeVito","102","222333","333222","Short"-pass2
现在循环遍历文件并在相应的机器上创建每个用户。确保将变量设置IFS
为字段分隔符,以便正确解析空格:
while IFS='-' read ip name opts pass; do \
ssh root@$ip useradd $name -mc $opts -p `openssl passwd $pass` -s /bin/bash \
done < list.txt
答案2
为什么不使用一些集中式用户数据库,如 LDAP(OpenLDAP 或更好的389 目录服务器)?