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 或加密保存

相关推荐
Aotman_1 分钟前
Element-UI Message Box弹窗 使用$confirm方法自定义模版内容,修改默认样式
linux·运维·前端
Elastic 中国社区官方博客27 分钟前
使用 Elastic 中的 OpenTelemetry 为 Nginx 实现端到端分布式追踪的实用指南
大数据·运维·分布式·elasticsearch·搜索引擎·信息可视化·全文检索
独自破碎E41 分钟前
配置ssh解决https不稳定的问题
运维·ssh
nimadan121 小时前
**手机小说扫榜工具2025推荐,精准追踪榜单动态与题材风向
python·智能手机
heartbeat..1 小时前
零基础学 SQL:DQL/DML/DDL/DCL 核心知识点汇总(附带连接云服务器数据库教程)
java·服务器·数据库·sql
编程武士1 小时前
Python 各版本主要变化速览
开发语言·python
那些年的笔记1 小时前
Linux屏幕旋转方法
linux·运维·服务器
XiaoHu02071 小时前
Linux网络编程套接字
linux·服务器·网络·git
傻啦嘿哟2 小时前
Python中的@property:优雅控制类成员访问的魔法
前端·数据库·python
竹之却2 小时前
CentOS 系列,防火墙相关指令
linux·运维·centos