批量修改多台设备密码

本文介绍了如何批量修改多台Linux设备的密码,包括采用publickey方式建立管理机和服务器的信任,使用expect脚本自动化ssh登陆及密码修改。详细讲述了通过echo、passwd、chpasswd和expect脚本四种方法的优缺点,特别是对于Debian系统中passwd命令的限制。文章还提供了实际的Tcl脚本示例,以实现交互式的自动化密码更改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

批量修改多台设备密码

一、关于linux密码
         密码的强度取决于加密算法的强度和密码串的长度、复杂性和不可预知性。linux 系统采用非常安全的NBS DES(美国国家标准局的Data Encryption Standard)加密算法。
密码的复杂性:一般来说,密码至少需要6-8 个字符,并且包含大小写字母、数字、特殊字符。
密码破解的方式:1、暴力破解。   2、密码的保管。

SSH 登陆系统2 种通用方法:1、用户名密码方式  2、publickey 的方式,可避免输入密码

二、采用publickey方式自动管理多台设备(自动批量修改的基础)
采用publickey 方式,需提前建立管理机和server 之间的信任关系
1、在管理机配置操作
创建隐藏的.ssh 目录
ljl@120:~$ mkdir /home/ljl/.ssh
生成公钥私钥对
ljl@120:~$ ssh-keygen 参数默认即可,一路回车确认即可。默认参数采用rsa 类型的2048位来创建key。
将管理机上生成的公钥拷贝到其他被管理servers 相应用户的.ssh 目录下,并改名为authorized_keys。
ljl@120:~$ scp -P6120 /home/ljl/.ssh/id_rsa.pub

### 批量修改 SSH 账号密码的方法 #### 使用 Shell 脚本实现批量修改 通过编写 Shell 脚本来完成批量修改操作是一种常见的方式。可以利用 `expect` 或者直接调用系统的 `passwd` 命令来实现自动化处理[^1]。 以下是基于 Shell 的脚本示例: ```bash #!/bin/bash # 密码文件路径 PASS_FILE="passwords.txt" # 用户名列表 USER_LIST="users.txt" while read user; do while read line; do old_password=$(echo $line | cut -d':' -f1) new_password=$(echo $line | cut -d':' -f2) echo "$new_password" | passwd --stdin $user &>/dev/null if [ $? -eq 0 ]; then echo "User [$user]'s password has been successfully changed." else echo "Failed to change the password for User [$user]." fi done <"$PASS_FILE" done <"$USER_LIST" ``` 此方法适用于本地用户密码管理场景,但对于远程服务器上的用户,则需借助其他工具或库[^4]。 #### 利用 Paramiko 实现 Python 自动化 Python 中的 `paramiko` 是一种强大的 SSH 客户端库,能够轻松实现跨多台设备的操作。下面是一个简单的例子展示如何使用它来进行批量密码更新: ```python import paramiko def update_ssh_password(ip, username, current_pwd, new_pwd): try: client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=ip, port=22, username=username, password=current_pwd) stdin, stdout, stderr = client.exec_command(f'echo "{username}:{new_pwd}" | chpasswd') error_message = stderr.read().decode() if not error_message.strip(): print(f"[SUCCESS] Password updated on {ip}") else: print(f"[ERROR] Failed updating password on {ip}: {error_message}") client.close() except Exception as e: print(f"[EXCEPTION] Unable to connect or modify password on {ip}. Error: {str(e)}") with open('servers.txt', 'r') as file: servers = [line.strip() for line in file] for server_ip in servers: update_ssh_password(server_ip, 'root', 'oldpass', 'newpass') ``` 上述代码片段展示了如何读取 IP 地址列表,并逐一尝试登录每台机器以更改其根账户的密码[^5]。 #### 工具推荐——SSHsuoha 对于更复杂的需求,例如 AWD 比赛中的动态环境维护,“SSHsuoha” 提供了一套完整的解决方案,不仅限于单次性的密码更换动作,还包括持续监控目标节点状态等功能特性[^3]。该程序允许自定义配置多个参数选项,从而满足不同业务场景下的灵活调整需求。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值