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

相关推荐
无奈笑天下12 分钟前
银河麒麟上nproc命令教程详解
linux·运维·服务器
大可不必了2 小时前
03 函数定义和调用
开发语言·python
承渊政道3 小时前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛3 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
imgsq3 小时前
GESP Python 一到四级:备考路线与真题特点
python·青少年编程
Rabitebla3 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
火云代理4 小时前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
威嵌神州4 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
Decay__5 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
eggwyw5 小时前
Anaconda安装卸载的详细流程指南
开发语言·python