在学校里面维护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文件夹下面。