### Python 批量修改 SSH 密码的实现 在日常运维工作中,经常需要对多台服务器的 SSH 密码进行批量修改。手动操作不仅效率低下,而且容易出错。利用 Python 的强大功能,我们可以轻松地编写脚本来实现这一需求。 #### 1. 技术背景与需求分析 在进行开发前,我们需要明确几个技术要点: - **SSH** (Secure Shell) 是一种网络协议,用于计算机之间的加密登录。 - **Paramiko** 是一个用于 Python 语言的 SSHv2 协议库,可以实现远程控制。 - **Pandas** 是一个强大的数据处理与分析库,适用于 Python。 根据题目描述,任务的核心在于: - 使用 Python 编写脚本,批量修改服务器上的 SSH 密码。 - 该脚本能够读取 Excel 表格中的服务器信息(如 IP 地址、用户名等),并据此更新 SSH 密码。 #### 2. 技术选型与准备工作 - **Python 版本**:推荐使用 Python 3,因为它提供了更丰富的功能支持。 - **依赖库安装**:使用 `pip install paramiko pandas` 安装所需库。 #### 3. 核心代码解析 下面将详细介绍核心代码的工作原理及其结构。 ##### 3.1 连接 SSH 服务器 ```python import paramiko import socket def demo(Ip, user, old_password, new_password): # 建立一个 ssh client 对象 ssh = paramiko.SSHClient() # 允许将信任的主机自动加入到 host_allow 列表 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 尝试连接服务器 try: ssh.connect(hostname=Ip, port=22, username=user, password=old_password, timeout=5) # 修改密码的方法之一 # command1 = "echo '%s:%s' | chpasswd" % (user, new_password) # stdin, stdout, stderr = ssh.exec_command(command1) # out, err = stdout.read(), stderr.read() # if err != '': # print(err) # else: # print(out) # 修改密码的方法之二 command = "passwd %s" % (user) stdin, stdout, stderr = ssh.exec_command(command) stdin.write(new_password + '\n' + new_password + '\n') out, err = stdout.read(), stderr.read() successful = 'password updated successfully' if successful in str(err): print(Ip + " 密码修改成功!") else: print('\033[31m错误:\033[0m' + str(err)) print(Ip + " 密码修改失败!") # 关闭连接 ssh.close() except paramiko.ssh_exception.AuthenticationException as e: print(Ip + ' ' + '\033[31m账号密码错误!\033[0m') with open('nossh.txt', 'a') as f: f.write(Ip + '\n') except socket.timeout as e: print(Ip + ' ' + '\033[31m连接超时!\033[0m') with open('timeoutssh', 'a') as f: f.write(Ip + '\n') ``` 这段代码的关键在于使用 Paramiko 库建立 SSH 连接,并通过两种不同的方式来修改密码。第一种方式是通过 `chpasswd` 命令,第二种方式则是使用 `passwd` 命令,这两种方法分别适用于不同的 Linux 发行版。 ##### 3.2 读取 Excel 文件 ```python import pandas as pd def Red_Excel(IP): file = r'E:\xxx.xlsx' pd.set_option('display.max_columns', None) pd.set_option('display.max_colwidth', 1000) n = pd.read_excel(file, sheet_name='xxx') # 显示含某字段的特定行 n1 = ... ``` 这里使用 Pandas 库来读取 Excel 文件。通过设置 Pandas 的显示选项,可以让数据展示得更加友好。然后读取指定路径下的 Excel 文件,并提取所需数据。 #### 4. 扩展与优化建议 - **日志记录**:在实际应用中,增加日志记录功能,便于跟踪修改过程中的异常情况。 - **并发处理**:对于大量服务器的场景,可以考虑使用多线程或多进程来提高执行效率。 - **错误处理**:增强错误处理机制,比如重试机制,避免因网络波动导致的部分失败。 - **安全性考虑**:在实际环境中,确保密码的安全传输非常重要。考虑使用安全的方式存储和传递密码。 #### 5. 结论 通过以上步骤,我们成功实现了利用 Python 批量修改 SSH 密码的需求。这不仅可以显著提高工作效率,还能有效减少人为错误。在实际部署过程中,还需注意代码的安全性和稳定性,确保系统的正常运行。
- 粉丝: 5
- 资源: 968
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 旧版鲁大师绿色免安装精简
- SSM驾考管理系统程序源码52150
- 机器学习(图像识别):垃圾检测和分割的图像数据集
- SAC-Auto路径规划, Soft Actor-Critic算法, SAC-pytorch,激光雷达Lidar避障仿真模拟
- python基础之综合练习一-38.黑色星期五Friday the Thirteenth-13日.py
- 基于STM32F4进行图像处理,识别图像画面中较亮的三个光点,并且通过串口打印出三个光点的坐标
- python基础之综合练习一-37.贪婪的送礼者Greedy Gift Givers-这是你的,这是他的~.py
- python爱心代码高级粒子-36.分数线划定-这么直接ov0.py
- 安卓-报名助手.apk
- data_view.html