对shell脚本敏感命令进行加密执行

发布于:2025-04-13 ⋅ 阅读:(14) ⋅ 点赞:(0)

我要加密这条命令:rm /root/scripty.sh 如何利用openssl aes-256-cbc 实现加密和解密,并执行命令

加密、解密并执行命令的完整流程

以下是使用 openssl aes-256-cbc 加密命令 rm /root/scripty.sh,解密并执行的详细步骤:


1. 加密命令

步骤:
  1. 生成密钥(KEY)和初始化向量(IV)。
  2. 将命令加密为 Base64 编码的密文。
命令:
# 生成密钥和 IV(32 字节密钥,16 字节 IV)
KEY=$(openssl rand -hex 32)
IV=$(openssl rand -hex 16)

# 加密命令
ENCRYPTED_COMMAND=$(echo "rm /root/scripty.sh" | openssl aes-256-cbc -K ${KEY} -iv ${IV} -base64)

# 输出加密结果
echo "Key: ${KEY}"
echo "IV: ${IV}"
echo "Encrypted Command: ${ENCRYPTED_COMMAND}"
输出示例:
Key: 5f4dcc3b5aa765d61d8327deb882cf99b7c4e8d3b8b7e8f8b7e8f8b7e8f8b7e8
IV: 1234567890abcdef1234567890abcdef
Encrypted Command: U2FsdGVkX1+1234567890abcdef1234567890abcdef==

2. 解密并执行命令

步骤:
  1. 使用相同的密钥和 IV 解密密文。
  2. 执行解密后的命令。
命令:
# 解密命令
DECRYPTED_COMMAND=$(echo "${ENCRYPTED_COMMAND}" | openssl aes-256-cbc -K ${KEY} -iv ${IV} -base64 -d)

# 执行解密后的命令
eval ${DECRYPTED_COMMAND}
说明:
  • eval:执行解密后的命令。
  • 确保密钥和 IV 与加密时一致。

3. 完整脚本示例

#!/bin/bash

# 加密
KEY=$(openssl rand -hex 32)
IV=$(openssl rand -hex 16)
ENCRYPTED_COMMAND=$(echo "rm /root/scripty.sh" | openssl aes-256-cbc -K ${KEY} -iv ${IV} -base64)

echo "Key: ${KEY}"
echo "IV: ${IV}"
echo "Encrypted Command: ${ENCRYPTED_COMMAND}"

# 解密并执行
DECRYPTED_COMMAND=$(echo "${ENCRYPTED_COMMAND}" | openssl aes-256-cbc -K ${KEY} -iv ${IV} -base64 -d)
eval ${DECRYPTED_COMMAND}

注意事项:

  1. 密钥和 IV 安全

    • 密钥和 IV 必须妥善保存,避免泄露。
    • 建议将密钥和 IV 存储在安全的位置(如密钥管理系统)。
  2. 权限管理

    • 确保执行命令的用户具有足够的权限(如 root 用户)。
  3. 命令安全性

    • 避免执行未经验证的命令,防止恶意代码注入。
  4. 环境兼容性

    • 确保目标系统已安装 openssl

通过以上步骤,您可以使用 openssl aes-256-cbc 加密命令,并在需要时解密并执行。

openssl aes-256-cbc 命令通常用于以下场景:

加密/解密文件或数据:

  • 用于保护敏感数据,如配置文件、数据库备份、通信内容等。
    支持对称加密,确保只有持有密钥的双方可以解密数据。

数据传输安全:

  • 在数据传输过程中,使用 AES-256-CBC 加密保证数据机密性。
    常用于安全通信协议(如 HTTPS、SSH)之外的场景。

自动化脚本中的加密操作:

  • 在 CI/CD 管道或自动化脚本中,用于加密/解密敏感信息(如凭据、密钥)。
    兼容性需求:

需要与其他系统或工具兼容时,AES-256-CBC 是一种广泛支持的加密算法。

🔥运维干货分享