### 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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- bdwptqmxgj11.zip
- onnxruntime-win-x86
- onnxruntime-win-x64-gpu-1.20.1.zip
- vs2019 c++20 语法规范 头文件 <ratio> 的源码阅读与注释,处理分数的存储,加减乘除,以及大小比较等运算
- 首次尝试使用 Win,DirectX C++ 中的形状渲染套件.zip
- 预乘混合模式是一种用途广泛的三合一混合模式 它已经存在很长时间了,但似乎每隔几年就会被重新发现 该项目包括使用预乘 alpha 的描述,示例和工具 .zip
- 项目描述 DirectX 引擎支持版本 9、10、11 库 Microsoft SDK 功能相机视图、照明、加载网格、动画、蒙皮、层次结构界面、动画控制器、网格容器、碰撞系统 .zip
- 项目 wiki 文档中使用的代码教程的源代码库.zip
- 面向对象的通用GUI框架.zip
- 基于Java语言的PlayerBase游戏角色设计源码