Lor*_*ein 136 linux password shadow
我需要手动编辑/etc/shadow以更改虚拟机映像内的 root 密码。
是否有命令行工具可以获取密码并/etc/shadow在标准输出上生成兼容的密码哈希?
Rah*_*til 160
您可以使用以下命令:
openssl passwd -6 -salt xyz yourpass
Run Code Online (Sandbox Code Playgroud)
注意:传递-1将生成一个 MD5 密码,-5一个 SHA256 和-6SHA512(推荐)
mkpasswd --method=SHA-512 --stdin
Run Code Online (Sandbox Code Playgroud)
该选项--method接受md5,sha-256并且sha-512
正如@tink 所建议的,我们可以使用以下chpasswd方法更新密码:
echo "username:password" | chpasswd
Run Code Online (Sandbox Code Playgroud)
或者,您可以将加密的密码与chpasswd. 首先使用它生成它:
perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'
Run Code Online (Sandbox Code Playgroud)
然后你可以使用生成的密码来更新/etc/shadow:
echo "username:encryptedPassWd" | chpasswd -e
Run Code Online (Sandbox Code Playgroud)
我们还可以使用加密的密码来使用此密码创建新用户,例如:
useradd -p 'encryptedPassWd' username
Run Code Online (Sandbox Code Playgroud)
use*_*018 38
在 Ubuntu 12.04 上,有 mkpasswd(来自 whois 包):功能过多的前端到 crypt(3)
mkpasswd -m sha-512 -S saltsalt -s <<< YourPass
Run Code Online (Sandbox Code Playgroud)
在哪里:
-m= 使用 TYPE 方法计算密码。如果 TYPE 有帮助,则打印可用的方法。-S = 使用盐。例如
$ mkpasswd -m help
-s = Read password from stdin
Run Code Online (Sandbox Code Playgroud)
u15*_*825 19
该解决方案具有以下优点:
重新提示输入密码,以免出错。
$ python3 -c "from getpass import getpass; from crypt import *; \
p=getpass(); print('\n'+crypt(p, METHOD_SHA512)) \
if p==getpass('Please repeat: ') else print('\nFailed repeating.')"
Run Code Online (Sandbox Code Playgroud)对于那些没有基于 Debian 的系统的人。Python3 也能正常工作。
python3 -c 'import crypt, getpass; print(crypt.crypt(getpass.getpass()))'
Run Code Online (Sandbox Code Playgroud)
getpass.getpass()将在命令行上提示您输入密码。
当前的方法都不是我可以接受的 - 它们要么在命令行上传递密码(最终会出现在我的 shell 历史记录中),要么需要安装其他实用程序(python3、makepasswd),要么使用硬编码盐,要么使用旧的哈希技术。
此方法将在提示输入密码后生成 SHA-512 哈希值,并使用随机盐。
一种使用Python 2而不使用任何非标准库的方法:
python2 -c 'import crypt, getpass,os,base64; print crypt.crypt(getpass.getpass(), "$6$"+base64.b64encode(os.urandom(16))+"$")'
Run Code Online (Sandbox Code Playgroud)
要在没有提示的情况下执行此操作:(这会将您的密码保留在命令历史记录中)
python2 -c 'import crypt, os,base64; print crypt.crypt("MyPassword", "$6$"+base64.b64encode(os.urandom(16))+"$")'
Run Code Online (Sandbox Code Playgroud)