Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用perl正确地散列密码?_Linux_Shell_Perl_Ubuntu_Crypt - Fatal编程技术网

Linux 如何使用perl正确地散列密码?

Linux 如何使用perl正确地散列密码?,linux,shell,perl,ubuntu,crypt,Linux,Shell,Perl,Ubuntu,Crypt,在使用脚本添加用户时,我尝试用perl散列我的密码,但当我尝试切换到该用户时,它会说密码不正确。以下是我写的: hidden=$(perl -e 'print crypt($pass, "salt"),"\n") useradd -m -p $hidden -d /home/$user -s /bin/bash $user 除此之外,我将我的新密码和用户名分别归为“pass”和“user”。您似乎想从shell环境中使用$pass,但在Perl解释器中

在使用脚本添加用户时,我尝试用perl散列我的密码,但当我尝试切换到该用户时,它会说密码不正确。以下是我写的:

hidden=$(perl -e 'print crypt($pass, "salt"),"\n")
useradd -m -p $hidden -d /home/$user -s /bin/bash $user 

除此之外,我将我的新密码和用户名分别归为“pass”和“user”。

您似乎想从shell环境中使用
$pass
,但在Perl解释器中,它看起来像Perl变量
$Perl

试一试


改为引用
pass
环境变量。

我尝试了此操作,得到了相同的错误。不要忘记
导出
或使用
pass=$pass
前缀
perl
,请注意
crypt
散列密码,而不加密密码。您无法撤消此操作,但可以通过再次运行相同的操作并将其与以前生成的值进行比较来验证密码。我感到困惑。如果我只是尝试使用命令“su user”登录,然后输入密码,它不应该自动进行验证吗?是的,它会。它会自动查找存储的散列值,并使用适当的过程对密码进行散列,然后比较这些值。如果您使用的其他实用程序可能不是这种情况,您必须自己进行验证。您的perl命令缺少一个结尾单引号
。请参阅[即使未使用
-n
/
-p
时,所有选项也有效]
hidden=$(perl -e 'print crypt($ENV{pass}, "salt")')