运行drush时,防止在命令行历史记录中记录敏感数据

时间:2017-11-10 14:51:39

标签: bash shell drupal drupal-7

我尝试使用drush命令安装Drupal:

drush -y -v site-install standard --db-url=mysql://${db_user}:${db_pass}@${db_host}:${db_port}/${db_name} --account-name=${DRUPAL_ADM_USER} --account-pass=${DRUPAL_ADM_PASS} --locale=${LANG} --site-name=\"${DRUPAL_SITE_NAME}\";

它正在使用MySQL数据库,我必须在db-url选项上传递用户密码,但我不希望这些敏感信息出现在我的控制台历史。

我想帮助隐藏这些信息。提前谢谢。

1 个答案:

答案 0 :(得分:1)

这里有两个命令可能有助于防止在命令行历史记录中记录敏感数据:

  • 使用read命令在运行drush site-install之前提示输入密码。

    # Read standard input and store it into db_pass
    # -s prevents echoing the input.
    # -p <string> outputs the string without a trailing newline before.
    read -s -p "Password : " db_pass 
    
  • 您还可以使用源或点运算符(source.从外部文件中source变量,但这意味着信息以纯文本形式存储(或加密最好),因此应首先考虑为此类文件设置适当的权限。用法:

    # Create ~/install.conf and make it initialize db_user
    echo 'db_user=foobar' > ~/install.conf
    # Execute ~/install.conf commands in the current shell context.
    . ~/install.conf 
    # Test : outputs 'foobar'
    echo ${db_user}
    

典型的安装脚本使用这两种方法,如果要在~/install.conf中存储/初始化除 db_pass 之外的所有变量,您将执行以下操作:

#!/bin/bash
. ~/install.conf
read -p 'Press [ Enter ] to begin installation'    
while [ -z "$db_pass" ] || [ "$db_pass" != "$check" ]; do
    read -s -p "Password: " db_pass && echo
    read -s -p "Confirm Password : " check && echo
done
drush -y -v site-install standard --db-url=mysql:\\//${db_user}:${db_pass}@${db_host}:${db_port}/${db_name} --account-name=${DRUPAL_ADM_USER} --account-pass=${DRUPAL_ADM_PASS} --locale=${LANG} --site-name=\"${DRUPAL_SITE_NAME}\";