Python批量修改SSH密码脚本实现
88 浏览量
更新于2024-08-31
1
收藏 49KB PDF 举报
"这篇文章主要展示了如何使用Python编程语言批量修改SSH密码,特别是在结合Excel表格处理大量账户信息的场景下。作者提供了详细的示例代码,并提到了两种在Ubuntu系统中修改密码的方法。"
在运维工作中,有时我们需要批量更新多台服务器的SSH登录密码,以提高安全性或应对紧急情况。Python中的`paramiko`库为我们提供了SSH连接和执行命令的功能,使得这个任务变得相对简单。`pandas`库则可以帮助我们读取和操作Excel表格,从而获取需要修改密码的账户信息。
首先,我们需要导入必要的库:
```python
import paramiko
import socket
import pandas as pd
```
`paramiko`用于SSH连接和命令执行,`socket`用于处理网络连接,而`pandas`用于处理数据。
定义一个函数`demo`,该函数接收IP地址、用户名、旧密码和新密码作为参数:
```python
def demo(Ip, user, old_password, new_password):
# ...
```
在函数内部,我们创建一个`SSHClient`对象,并设置策略自动添加新的主机键,然后尝试连接到指定的服务器:
```python
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=Ip, port=22, username=user, password=old_password, timeout=5)
```
文章中提供了两种修改密码的方法:
方法一 使用`chpasswd`命令:
```python
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)
ssh.close()
```
这个方法通过管道将新密码传递给`chpasswd`命令,以更新用户密码。但这种方法可能在某些情况下会提示“the input device is not a TTY”。
方法二 直接使用`passwd`命令:
```python
command = "passwd %s" % (user)
stdin, stdout, stderr = ssh.exec_command(command)
# 模拟回车输入新密码两次
stdin.write(new_password + '\n')
stdin.write(new_password + '\n')
stdin.flush()
```
这种方法直接调用`passwd`命令,并模拟键盘输入新密码两次以完成修改。
最后,记得在执行完命令后关闭SSH连接。
为了批量处理,你可以从Excel表格中读取数据,例如:
```python
df = pd.read_excel('servers.xlsx') # 假设你有一个名为'servers.xlsx'的文件,包含服务器信息
for index, row in df.iterrows():
Ip = row['IP']
user = row['Username']
old_password = row['OldPassword']
new_password = row['NewPassword']
demo(Ip, user, old_password, new_password)
```
这样,你可以逐个迭代表格中的每一行,对每台服务器执行密码修改操作。
批量修改SSH密码的实现不仅提高了工作效率,还确保了所有服务器的更新同步,是运维工作中的一个实用技巧。通过结合`paramiko`和`pandas`,我们可以轻松地处理这样的自动化任务。
2020-12-26 上传
2020-09-21 上传
2020-12-16 上传
2023-06-01 上传
2023-05-27 上传
2023-07-13 上传
2024-04-08 上传
2023-11-03 上传
2023-05-18 上传
weixin_38633157
- 粉丝: 5
- 资源: 969
最新资源
- OptiX传输试题与SDH基础知识
- C++Builder函数详解与应用
- Linux shell (bash) 文件与字符串比较运算符详解
- Adam Gawne-Cain解读英文版WKT格式与常见投影标准
- dos命令详解:基础操作与网络测试必备
- Windows 蓝屏代码解析与处理指南
- PSoC CY8C24533在电动自行车控制器设计中的应用
- PHP整合FCKeditor网页编辑器教程
- Java Swing计算器源码示例:初学者入门教程
- Eclipse平台上的可视化开发:使用VEP与SWT
- 软件工程CASE工具实践指南
- AIX LVM详解:网络存储架构与管理
- 递归算法解析:文件系统、XML与树图
- 使用Struts2与MySQL构建Web登录验证教程
- PHP5 CLI模式:用PHP编写Shell脚本教程
- MyBatis与Spring完美整合:1.0.0-RC3详解