要实现批量修改 Linux 服务器 root 密码,核心是通过 paramiko 库建立 SSH 连接并执行密码修改命令,以下是满足你需求的简洁 Python 脚本,严格按地址顺序执行、实时输出结果、追加记录成败文件。
前置准备
1. 安装python软件和依赖库
python软件安装方式:
直接从官网下载软件安装
依赖库安装方式:
pip install paramiko
2. 准备 3 个文本文件
(1) hosts.txt:每行一个服务器 IP 地址(如 192.168.1.10)
python
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
(2) passwords.txt:仅两行内容,第一行是原密码,第二行是新密码
python
old_password
new_password
(3)python_script.py 脚本会自动生成 success.txt(成功记录)和 fail.txt(失败记录),且每次执行均为追加模式
完整 Python 脚本文件:
python
import paramiko
import time
# 读取配置文件
def read_files():
with open("hosts.txt", "r", encoding="utf-8") as f:
hosts = [h.strip() for h in f if h.strip()]
with open("passwords.txt", "r", encoding="utf-8") as f:
pwd_lines = [p.strip() for p in f if p.strip()]
old_pwd = pwd_lines[0]
new_pwd = pwd_lines[1]
return hosts, old_pwd, new_pwd
# 追加写入结果文件
def write_result(filename, content):
with open(filename, "a", encoding="utf-8") as f:
f.write(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - {content}\n")
# 批量修改密码
def batch_change_pwd():
hosts, old_pwd, new_pwd = read_files()
ssh_port = 22 # 默认SSH端口,可根据实际修改
# 遍历主机,按顺序执行
for host in hosts:
try:
print(f"[正在处理] {host}")
# 建立SSH连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, port=ssh_port, username="root", password=old_pwd, timeout=10)
# 执行密码修改命令(echo 拼接避免交互)
cmd = f"echo 'root:{new_pwd}' | chpasswd"
stdin, stdout, stderr = ssh.exec_command(cmd)
stdout.channel.recv_exit_status() # 等待命令执行完成
# 验证执行结果
error = stderr.read().decode().strip()
if not error:
print(f"[成功] {host} 密码修改完成")
write_result("success.txt", f"{host} - 密码修改成功")
else:
raise Exception(error)
except Exception as e:
fail_info = f"{host} - 失败原因: {str(e)}"
print(f"[失败] {fail_info}")
write_result("fail.txt", fail_info)
finally:
try:
ssh.close()
except:
pass
time.sleep(1) # 避免服务器压力,可调整间隔
if __name__ == "__main__":
batch_change_pwd()
print("\n==== 执行结束 ====")
print(f"成功记录: success.txt | 失败记录: fail.txt")
注意:此处是修改root密码,修改其他账号按下面实例进行修改。
修改root账号:
cmd = f"echo 'root:{new_pwd}' | chpasswd"
修改gandalf账号:
cmd = f"echo 'gandalf:{new_pwd}' | chpasswd"
3、执行脚本
把这几个文件放到同一个目录。然后在windows系统CMD命令行中执行python python_script.py
关键特性说明
-
顺序执行:严格按照 hosts.txt 中的 IP 顺序逐个处理
-
实时输出:脚本运行时会打印当前处理主机、成功/失败状态
-
追加记录:success.txt 和 fail.txt 采用 a 模式写入,不会覆盖历史记录,且带时间戳
-
简洁无冗余:无多线程/超线程代码,逻辑清晰,仅保留核心功能
注意事项
-
目标服务器必须开启 SSH 服务(默认 22 端口),且 root 账户允许密码登录
-
新密码需符合服务器的密码策略(如长度、复杂度要求),否则会修改失败
-
执行脚本的机器需能 ping 通所有目标服务器,且防火墙放行 SSH 端口
-
敏感信息(密码)以文本文件存储,建议执行完成后删除 passwords.txt 或加密保存