Python批量修改SSH密码脚本实现
41 浏览量
更新于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-30 上传
2020-12-16 上传
2023-06-01 上传
2024-03-21 上传
2020-09-15 上传
2020-09-21 上传
2023-05-27 上传
weixin_38633157
- 粉丝: 5
- 资源: 968
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析