Gru*_*n94 36 passwords ssh bash shell aix
我试图通过脚本更改用户的密码.我不能使用sudo,因为有一项功能要求用户在其他用户更改密码时再次更改密码.
AIX正在系统上运行.
不幸的是,chpasswd不可用.
我预计会安装,但我也遇到了麻烦.
这是我认为会起作用的
echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
Run Code Online (Sandbox Code Playgroud)
但是,一旦运行脚本我提示please enter user's old password
不应该全部回应?
我是shell脚本的初学者,这令人困惑.
Man*_*nde 75
你可以试试:
echo "USERNAME:NEWPASSWORD" | chpasswd
Jua*_*doy 21
使用GNU passwd stdin标志.
从man页面:
Run Code Online (Sandbox Code Playgroud)--stdin This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.
注意:仅适用于root用户.
例
$ adduser foo
$ echo "NewPass" |passwd foo --stdin
Changing password for user foo.
passwd: all authentication tokens updated successfully.
Run Code Online (Sandbox Code Playgroud)
或者你可以使用expect,这个简单的代码将做到这一点:
#!/usr/bin/expect
spawn passwd foo
expect "password:"
send "Xcv15kl\r"
expect "Retype new password:"
send "Xcv15kl\r"
interact
Run Code Online (Sandbox Code Playgroud)
结果
$ ./passwd.xp
spawn passwd foo
Changing password for user foo.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
Run Code Online (Sandbox Code Playgroud)
小智 7
在您的情况下,这可能看起来像:
$ /usr/bin/passwd root <<EOF
test
test
EOF
Run Code Online (Sandbox Code Playgroud)
小智 6
您需要echo -e才能使换行符符号生效
你写了
echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
Run Code Online (Sandbox Code Playgroud)
你应该试试
echo -e "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
Run Code Online (Sandbox Code Playgroud)
很可能,你不需要该命令的oldpassword \n部分,你应该只需要两个新密码.不要忘记在感叹号周围使用单引号!
echo -e "new"'!'"passwd123\nnew"'!'"passwd123" | passwd user
Run Code Online (Sandbox Code Playgroud)