Linux 如何使用perl正确地散列密码?
在使用脚本添加用户时,我尝试用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解释器中
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")')