Python批量修改linux 密码脚本

要实现批量修改 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

关键特性说明

  1. 顺序执行:严格按照 hosts.txt 中的 IP 顺序逐个处理

  2. 实时输出:脚本运行时会打印当前处理主机、成功/失败状态

  3. 追加记录:success.txt 和 fail.txt 采用 a 模式写入,不会覆盖历史记录,且带时间戳

  4. 简洁无冗余:无多线程/超线程代码,逻辑清晰,仅保留核心功能

注意事项

  1. 目标服务器必须开启 SSH 服务(默认 22 端口),且 root 账户允许密码登录

  2. 新密码需符合服务器的密码策略(如长度、复杂度要求),否则会修改失败

  3. 执行脚本的机器需能 ping 通所有目标服务器,且防火墙放行 SSH 端口

  4. 敏感信息(密码)以文本文件存储,建议执行完成后删除 passwords.txt 或加密保存

相关推荐
IVEN_4 小时前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈
Ray Liang6 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
AI攻城狮6 小时前
如何给 AI Agent 做"断舍离":OpenClaw Session 自动清理实践
python
千寻girling6 小时前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python
AI攻城狮9 小时前
用 Playwright 实现博客一键发布到稀土掘金
python·自动化运维
曲幽9 小时前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
YuMiao10 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
孟健1 天前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞1 天前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python