在学校里面维护EDA软件的服务器,经常遇到的情况就是来了一批(不止一个)学生做项目,需要给他们添加服务器的账号和一个初始化的密码,所以写了一个简单的Perl脚本来做这个事情。脚本的内容其实是非常简单的,供大家参考,在这个基础上可以添加一些额外的功能,譬如直接自动根据/dev/random来产生密码,并且记录下来密码自动发给用户的E-Mail,因为我比较懒就没有搞这些功能……
#!/usr/bin/perl
use warnings;
$username = getpwuid( $< );
$file = "/home/ZZ/Desktop/Script/password.txt";
open($data, '<', $file) or die "Could not open file '$file' $!\n";
while (my $line = <$data>) {
chomp $line;
my @fields = split " " , $line;
if (@fields) {
my $username = $fields[0];
my $password = $fields[1];
@args = (
'/usr/sbin/useradd',
'-s', '/bin/bash',
'-d', "/home/$username",
'-g', "ISL",
$username
);
system(@args) == 0 or die "Failed adding user: @args failed: $?";
system("echo '$username:$password' | chpasswd");
print "Import linux user $username successfully!\n";
$vncPassword = `echo '$password' | vncpasswd -f`;
mkdir "/home/$username/.vnc/";
open(my $fh, '>', "/home/$username/.vnc/passwd") or die("error");
print $fh $vncPassword;
close $fh;
print "Set VNC user $username password successfully!\n";
system("chown -R $username /home/$username/.vnc");
system("chmod 600 /home/$username/.vnc/passwd");
system("chgrp -R ISL /home/$username/.vnc");
}
}
上面的代码可以方便运维来批量添加用户,其中-g是用户对应的组,-s是对应的bash,-d是home文件夹,可以根据需要修改。其中password.txt的格式就是每行一个“用户名 密码”。一些额外的设置也可以参考脚本里面的方法,直接写入到用户的home文件夹下面。