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

相关推荐
骇客野人2 分钟前
用python实现一个查询当天天气的MCP服务器
服务器·开发语言·python
天空属于哈夫克36 分钟前
拒绝被动响应:企业微信主动调用接口高阶方案
开发语言·python
吾诺7 分钟前
如何在Linux中找到MySQL的安装目录
linux·运维·mysql
lijwsunyt10 分钟前
Ubuntu虚拟机部署OpenClaw全踩坑实录|本地访问+模型配置一站式解决
linux·运维·ubuntu
夜猫子ing10 分钟前
《UNIX高级环境编程》 第十四章 高级I/O(一文读懂UNIX下高级I/O)
运维·服务器·网络
belldeep11 分钟前
python:spaCy 工业级 NLP 库
python·自然语言处理·nlp·spacy
Flittly11 分钟前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(11)Autonomous Agents (自治智能体)
笔记·python·ai·ai编程
2301_7765087212 分钟前
使用PyQt5创建现代化的桌面应用程序
jvm·数据库·python
dmlcq14 分钟前
一文读懂 PageQueryUtil:分页查询的优雅打开方式
开发语言·windows·python
悲伤小伞16 分钟前
10-MySQL_事务管理
linux·数据库·c++·mysql·centos