本文目录导读:

我来介绍几种批量创建SSH账号的脚本方法:
方法1:使用Shell脚本
基本批量创建脚本
#!/bin/bash
# 批量创建SSH用户脚本
# 使用方法: ./create_ssh_users.sh users.txt
USER_FILE="users.txt"
# 检查用户文件是否存在
if [ ! -f "$USER_FILE" ]; then
echo "错误: 用户文件 $USER_FILE 不存在"
echo "请创建包含用户名列表的文件,每行一个用户名"
exit 1
fi
# 设置默认密码
DEFAULT_PASSWORD="TempPass123!"
# 逐行读取用户文件
while read -r username; do
# 跳过空行和注释
if [[ -z "$username" ]] || [[ "$username" == \#* ]]; then
continue
fi
# 检查用户是否已存在
if id "$username" &>/dev/null; then
echo "用户 $username 已存在,跳过"
continue
fi
# 创建用户
useradd -m -s /bin/bash "$username"
# 设置密码
echo "$username:$DEFAULT_PASSWORD" | chpasswd
# 强制用户首次登录时修改密码
passwd -e "$username"
# 添加到SSH允许组(可选)
usermod -aG sshusers "$username" 2>/dev/null
echo "成功创建用户: $username"
done < "$USER_FILE"
echo "批量用户创建完成"
高级版本(带密码生成)
#!/bin/bash
# 生成随机密码
generate_password() {
local length=${1:-12}
openssl rand -base64 $((length * 3/4)) | tr -d '/+=' | head -c $length
}
# 创建用户和SSH密钥
create_user_with_ssh() {
local username="$1"
local ssh_dir="/home/$username/.ssh"
# 创建用户
useradd -m -s /bin/bash "$username"
# 生成随机密码
password=$(generate_password 16)
echo "$username:$password" | chpasswd
# 创建SSH目录
mkdir -p "$ssh_dir"
# 生成SSH密钥对
ssh-keygen -t rsa -b 2048 -f "$ssh_dir/id_rsa" -N "" -C "$username@$(hostname)"
# 设置公钥认证
cp "$ssh_dir/id_rsa.pub" "$ssh_dir/authorized_keys"
# 设置权限
chmod 700 "$ssh_dir"
chmod 600 "$ssh_dir/authorized_keys"
chmod 600 "$ssh_dir/id_rsa"
# 修改所有者
chown -R "$username:$username" "$ssh_dir"
# 输出用户信息
echo "=============================="
echo "用户名: $username"
echo "密码: $password"
echo "私钥位置: $ssh_dir/id_rsa"
echo "=============================="
# 保存用户信息到文件
echo "$username:$password" >> users_credentials.txt
}
# 主程序
cat > users.txt << 'EOF'
# 每行一个用户名
user001
user002
user003
EOF
while read -r username; do
if [[ -z "$username" ]] || [[ "$username" == \#* ]]; then
continue
fi
create_user_with_ssh "$username"
done < users.txt
方法2:Python批量创建脚本
#!/usr/bin/env python3
import os
import subprocess
import string
import random
import json
from pathlib import Path
class SSHUserManager:
def __init__(self):
self.created_users = []
def generate_password(self, length=16):
"""生成随机密码"""
chars = string.ascii_letters + string.digits + '!@#$%^&*'
return ''.join(random.choice(chars) for _ in range(length))
def generate_ssh_key(self, username, key_dir):
"""生成SSH密钥对"""
private_key = Path(key_dir) / "id_rsa"
public_key = Path(key_dir) / "id_rsa.pub"
cmd = [
"ssh-keygen", "-t", "rsa", "-b", "2048",
"-f", str(private_key),
"-N", "",
"-C", f"{username}@batch-creation"
]
subprocess.run(cmd, check=True, capture_output=True)
return private_key, public_key
def create_user(self, username, user_dir="/home"):
"""创建单个SSH用户"""
if os.path.exists(f"/home/{username}"):
print(f"用户 {username} 已存在,跳过")
return None
# 创建系统用户
password = self.generate_password()
subprocess.run(["useradd", "-m", "-s", "/bin/bash", username], check=True)
# 设置密码
passwd_process = subprocess.Popen(
["chpasswd"],
stdin=subprocess.PIPE,
text=True
)
passwd_process.communicate(f"{username}:{password}")
# 设置SSH目录
home_dir = Path(f"/home/{username}")
ssh_dir = home_dir / ".ssh"
ssh_dir.mkdir(mode=0o700, exist_ok=True)
# 生成SSH密钥
try:
private_key, public_key = self.generate_ssh_key(username, ssh_dir)
# 设置authorized_keys
authorized_keys = ssh_dir / "authorized_keys"
authorized_keys.write_text(public_key.read_text())
authorized_keys.chmod(0o600)
# 设置权限
for item in [ssh_dir, private_key, public_key]:
item.chown(int(uid))
except subprocess.CalledProcessError as e:
print(f"SSH密钥生成失败: {e}")
user_info = {
"username": username,
"password": password,
"home_dir": str(home_dir),
"ssh_key": str(private_key if 'private_key' in locals() else "N/A")
}
self.created_users.append(user_info)
return user_info
def batch_create_users(self, user_list_file):
"""批量创建用户"""
users = []
# 读取用户列表
with open(user_list_file, 'r') as f:
users = [line.strip() for line in f
if line.strip() and not line.startswith('#')]
print(f"准备创建 {len(users)} 个用户")
for username in users:
try:
user_info = self.create_user(username)
if user_info:
print(f"✓ 创建用户 {username} 成功")
except Exception as e:
print(f"✗ 创建用户 {username} 失败: {e}")
# 保存用户信息
if self.created_users:
with open("created_users.json", "w") as f:
json.dump(self.created_users, f, indent=2)
print(f"\n已保存 {len(self.created_users)} 个用户信息到 created_users.json")
def main():
manager = SSHUserManager()
# 创建用户列表文件
users = [f"ssh_user_{i:03d}" for i in range(1, 11)]
with open("users_to_create.txt", "w") as f:
f.write("# 批量创建SSH用户列表\n")
f.write("# 格式: 每行一个用户名\n\n")
for user in users:
f.write(f"{user}\n")
# 批量创建用户
manager.batch_create_users("users_to_create.txt")
if __name__ == "__main__":
main()
方法3:使用Ansible批量管理
inventory.yml
all:
hosts:
localhost:
ansible_connection: local
vars:
users:
- { name: "user1", uid: 1001 }
- { name: "user2", uid: 1002 }
- { name: "user3", uid: 1003 }
create_users.yml
---
- name: 批量创建SSH用户
hosts: all
become: yes
vars_files:
- password_vars.yml
tasks:
- name: 创建系统用户
user:
name: "{{ item.name }}"
uid: "{{ item.uid }}"
shell: /bin/bash
create_home: yes
password: "{{ default_password | password_hash('sha512') }}"
update_password: always
loop: "{{ users }}"
- name: 设置SSH目录
file:
path: "/home/{{ item.name }}/.ssh"
state: directory
mode: '0700'
owner: "{{ item.name }}"
group: "{{ item.name }}"
loop: "{{ users }}"
- name: 添加公钥
authorized_key:
user: "{{ item.name }}"
key: "{{ lookup('file', 'keys/' + item.name + '.pub') }}"
loop: "{{ users }}"
使用说明
- 基本使用:
# 给脚本执行权限 chmod +x create_ssh_users.sh
确保在root权限下运行
sudo ./create_ssh_users.sh
或使用Python版本
python3 create_ssh_users.py
2. **用户列表文件格式**(users.txt):
```text
# 注释行以#开头
# 每行一个用户名
admin1
devops1
developer1
tester1
安全建议
-
密码管理:
- 使用强密码生成
- 立即更改默认密码
- 考虑使用SSH密钥认证
-
权限控制:
- 限制SSH登录的组
- 配置/etc/ssh/sshd_config
- 使用sudo控制权限
-
日志记录:
# 记录所有用户操作 echo "$(date) - 创建用户 $username" >> /var/log/user_creation.log
根据需要选择合适的脚本方法,建议在生产环境中使用Python或Ansible版本,因为它们有更好的错误处理和日志管理功能。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播