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

相关推荐
小风吹啊吹~10 小时前
vscode的tunnel链接(Linux 服务器 + Windows 本地电脑版本)
服务器·vscode·microsoft·远程工作
AI玫瑰助手10 小时前
Python入门:Windows/macOS/Linux系统安装Python教程
windows·python·macos
智算菩萨10 小时前
OpenAI Codex 国内使用完全指南:Windows/macOS/Linux 三平台详细安装配置教程(现在最新的有gpt-5.3-codex和gpt-5.4)
linux·windows·gpt·macos·ai·ai编程·codex
Jinkxs10 小时前
LoadBalancer- 常见负载均衡算法:轮询 / 加权轮询 / 最少连接等基础实现
运维·算法·负载均衡
eastyuxiao10 小时前
流程图 + 配置清单 在团队 / 公司运维场景的落地应用方法
运维·人工智能·流程图
Yupureki10 小时前
《Linux网络编程》4.应用层HTTP协议
linux·服务器·c语言·网络·c++·http
m0_7381207210 小时前
网路安全编程——熟悉并使用Scapy简单实现捕捉主流邮箱协议(SMTP、POP3和IMAP) 的身份凭证
网络·python·网络协议·tcp/ip·安全·网络安全
new【一个】对象10 小时前
RAG详解
python·llm·agent·rag
傲笑风10 小时前
jupyter转PDF教程
python·jupyter
孙同学_10 小时前
【Linux篇】网络层与数据链路层详解
linux·网络·智能路由器