8je*_*ean 85
来自" man 1 passwd":
--stdin
This option is used to indicate that passwd should read the new
password from standard input, which can be a pipe.
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下
adduser "$1"
echo "$2" | passwd "$1" --stdin
Run Code Online (Sandbox Code Playgroud)
[ 更新 ]评论中提出了一些问题:
您的passwd命令可能没有--stdin选项:使用该chpasswd
实用程序,如ashawley所建议的那样.
如果你使用bash以外的shell,"echo"可能不是内置命令,shell将调用/bin/echo.这是不安全的,因为密码将显示在进程表中,并且可以使用类似的工具查看ps.
在这种情况下,您应该使用其他脚本语言.以下是Perl中的一个示例:
#!/usr/bin/perl -w
open my $pipe, '|chpasswd' or die "can't open pipe: $!";
print {$pipe} "$username:$password";
close $pipe
Run Code Online (Sandbox Code Playgroud)
Fer*_*osh 50
唯一的解决方案适用于Ubuntu 12.04:
echo -e "new_password\nnew_password" | (passwd user)
Run Code Online (Sandbox Code Playgroud)
但第二个选项仅在我改变时才有效:
echo "password:name" | chpasswd
Run Code Online (Sandbox Code Playgroud)
至:
echo "user:password" | chpasswd
Run Code Online (Sandbox Code Playgroud)
请参阅原始帖子中的说明:通过脚本更改密码
lhu*_*ath 26
阅读以下智者:
我引用:
你在bash中所做的一切都无法奏效.passwd(1)不读取标准输入.这是故意的.这是为了你的保护.密码从未打算放入程序或由程序生成.它们只能由一个真实的人类的手指进入,具有功能性的大脑,并且永远不会在任何地方写下来.
尽管如此,我们仍有大批用户询问他们如何规避35年的Unix安全性.
它继续解释你如何shadow(5)正确设置密码,并向你展示GNU -I-only-care-about-security-if-it-not-make-me-think-too-much-much of abuse passwd(1).
最后,如果您打算使用愚蠢的GNU passwd(1)扩展--stdin,请不要将密码传递给命令行.
echo $mypassword | passwd --stdin # Eternal Sin.
echo "$mypassword" | passwd --stdin # Eternal Sin, but at least you remembered to quote your PE.
passwd --stdin <<< "$mypassword" # A little less insecure, still pretty insecure, though.
passwd --stdin < "passwordfile" # With a password file that was created with a secure `umask(1)`, a little bit secure.
Run Code Online (Sandbox Code Playgroud)
最后一个是你可以用GNU做的最好的passwd.虽然我仍然不会推荐它.
将密码放在命令行上意味着任何拥有最远程访问权限的人都可以监控ps或者窃取密码.即使你认为你的盒子是安全的; 它的东西,你应该真正得到避免不惜一切代价的习惯(是的,做多一点麻烦完成工作的,甚至成本).
小智 24
如今:
echo "user:pass" | chpasswd
如果您passwd不支持--stdin并且出于某种原因不想(或不能)使用,则此处文档chpasswd有效。
例子:
#!/usr/bin/env bash
username="user"
password="pass"
passwd ${username} << EOD
${password}
${password}
EOD
Run Code Online (Sandbox Code Playgroud)
在 Arch Linux 下测试。这passwd是包的一个元素shadow-utils并从包中安装core/filesystem,默认情况下您通常会拥有该元素,因为core/base.