编写Bash脚本:从命令行获取用户名密码并加密更新配置文件
Bash脚本实现配置文件用户名与加密密码更新
完整脚本代码
#!/bin/bash # 提示输入用户名 read -p "请输入用户名: " new_username # 提示输入密码(隐藏输入内容) read -s -p "请输入密码: " new_password echo # 换行优化输出格式 # 使用openssl对密码加密,这里用MD5算法,可按需更换为SHA-256/SHA-512 encrypted_pass=$(openssl passwd -1 "$new_password") # 检查目标配置文件是否存在 if [ ! -f "admin.conf" ]; then echo "错误:admin.conf文件不存在!" exit 1 fi # 替换配置文件中的username字段 sed -i "s/^username = .*/username = $new_username/" admin.conf # 替换配置文件中的pass字段为加密后的密码 sed -i "s/^pass = .*/pass = $encrypted_pass/" admin.conf echo "用户名和加密密码已成功更新至admin.conf!"
代码逐行说明
#!/bin/bash:指定脚本的执行解释器为Bash,必须放在脚本最开头。read -p "请输入用户名: " new_username:显示提示文本,读取用户输入的用户名并存储到new_username变量中。read -s -p "请输入密码: " new_password:-s参数会隐藏用户输入的密码(避免明文显示),输入完成后用echo换行,让后续输出更整洁。encrypted_pass=$(openssl passwd -1 "$new_password"):调用openssl工具加密密码,-1代表使用MD5加密算法;若需要更高安全性,可替换为-5(SHA-256)或-6(SHA-512)。加密后的密码存入encrypted_pass变量。- 文件存在检查:通过
[ ! -f "admin.conf" ]判断配置文件是否存在,若不存在则打印错误信息并退出脚本,避免无效操作。 sed -i "s/^username = .*/username = $new_username/" admin.conf:使用sed命令直接修改原文件,正则表达式^username = .*精准匹配以username =开头的行,将其替换为包含新用户名的内容。-i参数表示直接修改原文件。- 第二条
sed命令逻辑相同,用于替换pass字段为加密后的密码。
使用注意事项
- 确保系统已安装
openssl:绝大多数Linux发行版默认自带,若未安装,可通过包管理器安装(如Debian/Ubuntu:sudo apt install openssl;CentOS/RHEL:sudo yum install openssl)。 - 权限问题:运行脚本时需要具备
admin.conf文件的读写权限,若文件归root所有,需用sudo执行脚本。 - 加密算法选择:MD5安全性较低,生产环境建议使用SHA-512(将
-1改为-6)。
内容的提问来源于stack exchange,提问作者Rishabh Jain
相关产品推荐
相关产品推荐

