作为一名系统管理员, 在某些情况下,需要批量添加系统用户,并设置密码。本文使用Python实现了批量添加用户,并设置密码(用户名与密码相同),同时,在添加用户时,将用户添加到了同一个用户组。以下是源代码
import subprocess
import os
#定义添加用户函数,参数分别为用户名、密码、用户所属组
def add_user(username, password, user_group):
# 添加用户
add_user_cmd = f'useradd -g {user_group} {username}'
subprocess.run(add_user_cmd, shell=True, check=True)
# 设置密码
set_password_cmd = f'echo {password} | passwd --stdin {username}'
subprocess.run(set_password_cmd, shell=True, check=True)
# 添加到用户组
add_to_group_cmd = f'usermod -g {user_group} {username}'
subprocess.run(add_to_group_cmd, shell=True, check=True)
# 按规则批量产生用户名和密码用户
usersCount =300 #默认生产300个用户
users = [] #用户列表
defaultUserGroup = 'jupyterhub' #默认用户组
for i in range(usersCount):
if i < 9:
username = 'user0' + str(i+1)
else:
username = 'user' + str(i+1)
my_dic = {'username':username,'password':username,'user_group':defaultUserGroup}
users.append(my_dic)
#检查用户组是否已经存在函数
def check_group_exists(groupname):
# 执行命令检查用户组是否存在
command = ['getent', 'group', groupname]
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
# 判断返回值
if result.returncode == 0:
return True
else:
return False
#删除用户组函数
def delete_group(groupname):
# 执行命令删除用户组
command = ['groupdel', groupname]
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 判断返回值
if result.returncode == 0:
return True, result.stdout.decode().strip()
else:
return False, result.stderr.decode().strip()
#坚持用户是否已经存在函数
def check_user_exists(username):
# 执行命令检查用户是否存在
command = ['id', '-u', username]
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
# 判断返回值
if result.returncode == 0:
return True
else:
return False
#删除用户函数
def delete_user(username):
# 执行命令删除用户
command = ['userdel', username]
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 判断返回值
if result.returncode == 0:
return True, result.stdout.decode().strip()
else:
return False, result.stderr.decode().strip()
#检查用户名与用户组,若已经存在则删除
for user in users:
username = user['username']
groupname = user['username'] #与用户名相同的用户组
if check_user_exists(username):
success,output = delete_user(username)
if success:
print(f'用户{username}已成功删除:{output}')
else:
print(f'用户{username}不存在')
# 检查用户组是否存在
if check_group_exists(groupname):
# 如果存在,执行删除操作
success, output = delete_group(groupname)
if success:
print(f"用户组 {groupname} 已成功删除: {output}")
else:
print(f"删除用户组 {groupname} 失败: {output}")
else:
print(f"用户组 {groupname} 不存在")
#添加自动生产的用户
for user in users:
username = user['username']
password = user['password']
user_group = user['user_group']
try:
# 检查用户组是否存在,如果不存在则创建
os.system("getent group " + user_group + " || groupadd " + user_group)
# 创建用户并设置密码
add_user(username, password, user_group)
print(f"User '{username}' '{user_group}' created successfully.")
except subprocess.CalledProcessError as e:
print(f"Failed to create user '{username}' with error: {e}")