Python批量修改SSH密码脚本实现

8 下载量 29 浏览量 更新于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`,我们可以轻松地处理这样的自动化任务。