【问题标题】:Prompting for MySQLDump password in a bash script?在 bash 脚本中提示 MySQLDump 密码?
【发布时间】:2013-04-15 19:04:49
【问题描述】:

我正在尝试编写一个运行mysqldump 命令的bash 脚本,该命令使用-p 标志。此标志提示用户输入密码,直接在 shell 中运行时按预期工作,但在脚本中运行时不会出现。

#!/usr/bin/env 

ssh user@domain.com 'mysqldump -u mysqluser -p --databases foo | bzip2' > ~/temp/foo-dump.sql.bz2

现在我可以在脚本中嵌入密码或将其作为参数传递,但我真的希望脚本提示用户输入密码,这样密码就不会出现在我的脚本存储库或我的 bash 历史记录中。

有人知道如何实现这一点吗?

【问题讨论】:

    标签: bash mysqldump


    【解决方案1】:

    这应该可以解决问题:

    read -p "mysql password: " PASS && ssh user@domain.com 'mysqldump -u mysqluser -p'$PASS' --databases foo | bzip2' > foo-dump.sql.bz2 ; PASS=""
    

    在这种情况下,您将首先输入 mysql 密码,然后系统会提示您输入 ssh 密码。请注意,mysql 密码不会被隐藏,即有人可以在您的肩膀上读取它。如果你想避免这种情况,请使用标志-s

    read -s -p "mysql password: " PASS && ...
    

    还要注意,“p”(在 -p 中表示密码)和密码变量的引号之间不能有任何空格。

    另外,您的 shebang 没有指定使用哪个解释器,这可能是个问题。我建议你使用#!/bin/bash#!/usr/bin/env bash

    【讨论】:

    • 嗯,没用。我可以在运行脚本后输入文本,但这不是明确的承诺,并且脚本不会处理到实际的转储。
    • 我添加了一个明确的 mysql 密码提示。为什么说“脚本不处理实际转储”?怎么了?它给你一个空文件?它会引发错误?
    • 对不起,我还是不明白你遇到了什么问题。只需重定向到一个文件 (> foo-dump.sql.bz2) 就应该创建一个空文件,即使 ssh 命令失败。你还有什么其他的线索可以给我吗?
    • 等等,我知道。我提出了一个&&,这意味着如果第一个命令(read)失败,第二个命令(ssh)将不会被执行。你的阅读可能失败了,虽然我不知道为什么......
    • 我尝试创建一个 bash 脚本来运行它。如果我使用#!/bin/sh#!/bin/bash 它可以正常工作,但使用#!/usr/bin/env 它不会提示我。 read(正如我在这里使用的)是 bash 的内置命令。你有理由使用#!/usr/bin/env吗?
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2016-12-01
    • 2016-03-13
    • 2015-09-21
    • 1970-01-01
    • 2014-12-08
    • 2014-12-09
    • 1970-01-01
    相关资源
    最近更新 更多