gpt4 book ai didi

linux - 使用 crypt 的基本 Perl/Shellscripting 问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:33 25 4
gpt4 key购买 nike

我目前正在学习如何使用 perl 以及如何开始使用 shellscript。我正在尝试通过 echo 将代码片段发送到另一个 shell 脚本,该脚本加密密码,然后用于在 linux 中添加新用户。片段:

echo "pass=\$(perl -e 'print crypt(\"password\", \"password\")' $password)" >> /home/testscript.sh

这将使用以下命令添加新用户:

/usr/sbin/useradd -m -p \$pass testuser

我的问题是:为什么所有的反斜杠?比如\&(perl, \"password\", and \$pass in the add user code?他们需要吗?或者我可以只需:

echo "pass=$(perl -e 'print crypt("password", "password")' $password)" 
/usr/sbin/useradd -m -p &pass testuser 

最佳答案

您发布的一个衬里相当复杂,它嵌套了一堆命令,这种嵌套导致所有反斜杠。

分解它可能会让你清楚。

从 bash(或类似的)你有

$password = 'ABC123'; # set somewhere, using a constant for clarity
echo "pass=\$(perl -e 'print crypt(\"password\", \"password\")' $password)" >> /home/testscript.sh

这会将以下行添加到 testscript.sh,可能是一个 bash shell 脚本

pass=$(perl -e 'print crypt("password", "password")' ABC123)

请注意,我们已去除所有斜线并提供密码。

然后可以将其前半部分作为单行 perl 脚本执行。

print crypt("password", "password")

这使用 C 库 crypt 函数来计算密码的哈希值,使用 salt 密码。

因此,所有斜线都需要防止传播元素,如引号和美元符号,进一步向下执行路径。


请注意,这段代码实际上并没有用,crypt 正在加密一个常量,我本以为 $password 是要在函数调用中传递的,它似乎没有用在当前位置。

还有一个脚本生成一个调用 perl 的脚本……它看起来不太漂亮。我不知道完整的上下文,但我很难相信这是最好的方法。就我个人而言,我会避免玩游戏,而只编写一个 perl 脚本。我个人的经验法则是,任何变得复杂或超过 50 行的 bash 脚本都是用 perl 完成的,但这很大程度上受到我不理解或不喜欢 bash 的事实的影响。

关于linux - 使用 crypt 的基本 Perl/Shellscripting 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53272899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com