硬编码密码与使用`cat` 从文件中检索

trp*_*him 0 linux perl zentyal

我使用 Zentyal(以前称为 EBox)作为我的家庭网关/服务器,以评估它是否可以在本地组织中使用。我想更改根 MySQL 密码,我做到了,并且错误地更改了 Zentyal/var/lib/zentyal/conf文件夹中的密码以匹配它。所以我将 Zentyal 密码改回原来的样子,但问题是,当我使用nano它编辑该文件时,必须添加一个换行符或其他东西,因为现在检索密码的 Perl 脚本(用于cat从file) 导致 MySQL 访问被拒绝错误。然而,当我在 Perl db connect 函数中硬编码密码时,它就像一个魅力。

我试图nano -L编辑该文件,以及echo >将密码输出到文件中,但两者都没有运气。当 Perl 脚本执行 acat来获取密码时,是什么导致了问题?

lar*_*sks 5

为什么不直接使用 perl 的原生 i/o 功能来读取文件?

open FH, "/path/to/password.txt";
chomp(my $passwd = <FH>);
Run Code Online (Sandbox Code Playgroud)

chomp字符串的结尾这里丢弃一个换行符。

Perl 脚本执行 cat 获取密码时出现问题的原因是什么?

您是否尝试过打印出您从文件中读取的密码?就像是:

print ":", $passwd, ":\n";
Run Code Online (Sandbox Code Playgroud)

冒号在那里,因此您可以发现任何无关的空格(换行符等)。您还可以使用xxd(如果vim安装在您的系统上,您将拥有)或od -a查看文件中的所有字节。例如,给定一个包含“ secret\n”的文件,od -a将显示:

$ od -a file
0000000   s   e   c   r   e   t  nl
0000007
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用 nano -L 来编辑文件以及使用 echo > 将密码添加到文件中,

我不知道nano,但echo会在输出的末尾添加一个换行符。如果你不想这样:

echo -n password > file
Run Code Online (Sandbox Code Playgroud)

-n抑制拖尾换行符。