Câu trả lời:
Bạn có thể sử dụng các lệnh sau cho cùng:
openssl passwd -6 -salt xyz yourpass
Lưu ý: truyền -1
sẽ tạo mật khẩu MD5, -5
SHA256 và -6
SHA512 (được khuyến nghị)
mkpasswd --method=SHA-512 --stdin
Phương pháp chấp nhận md5
, sha-256
vàsha-512
Như @tink đã đề xuất, chúng tôi có thể cập nhật mật khẩu bằng chpasswd
cách sử dụng:
echo "username:password" | chpasswd
Hoặc bạn có thể sử dụng mật khẩu được mã hóa với chpasswd
. Đầu tiên tạo ra nó bằng cách sử dụng này:
perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'
Sau đó, bạn có thể sử dụng mật khẩu được tạo để cập nhật:
echo "username:encryptedPassWd" | chpasswd -e
Mật khẩu được mã hóa này, chúng tôi có thể sử dụng để tạo người dùng mới bằng mật khẩu, ví dụ:
useradd -p 'encryptedPassWd' username
openssl passwd -1
cái 1) không kết thúc ở đó và 2) tạo ra một loại muối ngẫu nhiên cho bạn (cái này cũng không có trong lịch sử vỏ).
openssl passwd
thông thạo cho bất cứ ai cố gắng tìm ra những gì các -1
tùy chọn làm.
python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'
- từ câu hỏi ServerFault có liên quan
Trên Ubuntu 12.04, có mkpasswd (từ gói whois): Giao diện người dùng quá nhiệt đến tiền điện tử (3)
mkpasswd -m sha-512 -S saltsalt -s <<< YourPass
Ở đâu:
-m
= Tính toán mật khẩu bằng phương pháp TYPE. Nếu TYPE là trợ giúp thì các phương thức có sẵn được in.-S
= muối sử dụng.Ví dụ
$ mkpasswd -m help
-s = Read password from stdin
Giải pháp này có những lợi ích sau:
Nhắc lại mật khẩu để tránh nhầm lẫn.
$ 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.')"
Đối với những người không có hệ thống dựa trên Debian. Python3 cũng hoạt động tốt.
python3 -c 'import crypt; print(crypt.crypt("test"))'
LƯU Ý: Chuỗi "kiểm tra" là mật khẩu mà chúng tôi đang tạo dưới dạng chuỗi được mã hóa.
crypt.mksalt
không hoạt động khi tạo mật khẩu cho /etc/shadow
. Nhưng phương pháp của @ Alex131089 hoạt động!
openssl
là một công cụ khá phổ biến.
Không có phương pháp hiện tại nào được tôi chấp nhận - Chúng truyền mật khẩu trên dòng lệnh (kết thúc trong lịch sử vỏ của tôi), yêu cầu cài đặt các tiện ích bổ sung ( python3
, makepasswd
), sử dụng muối được mã hóa cứng hoặc sử dụng các kỹ thuật băm cũ.
Phương pháp này sẽ tạo băm SHA-512 sau khi nhắc mật khẩu và sẽ sử dụng một loại muối ngẫu nhiên.
Một phương thức sử dụng Python 2 mà không có bất kỳ thư viện không chuẩn nào:
python2 -c 'import crypt, getpass,os,base64; print crypt.crypt(getpass.getpass(), "$6$"+base64.b64encode(os.urandom(16))+"$")'
Để làm điều đó mà không cần nhắc: (Điều này sẽ để lại mật khẩu của bạn trong lịch sử lệnh)
python2 -c 'import crypt, os,base64; print crypt.crypt("MyPassword", "$6$"+base64.b64encode(os.urandom(16))+"$")'
ps
đầu ra trong một phần của giây mà lệnh đang chạy. (An toàn nhất vẫn là sử dụng phiên bản nhắc nhập mật khẩu)
Các openssl
và chpasswd -e
cặp đã không làm việc trong trường hợp của tôi trong RHEL6. Kết hợp openssl passwd
và usermod -p
chỉ huy đã làm công việc.
Tạo giá trị băm của mật khẩu cùng với giá trị muối:
$ openssl passwd -1 -salt 5RPVAd clear-text-passwd43
$1$5RPVAd$vgsoSANybLDepv2ETcUH7.
Sau đó, sao chép chuỗi mã hóa vào usermod. Hãy chắc chắn để bọc nó với dấu ngoặc đơn.
$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root
Kiểm tra nó trong tập tin bóng tối.
$ grep root /etc/shadow
root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::
Một phương pháp khác để tạo mật khẩu, là sử dụng openssl
công cụ.
Tạo mật khẩu MD5
openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/
Tạo mật khẩu DES
openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2
Mở rộng một chút về những lời chỉ trích của u150825 và Gert van den Berg, tôi thấy mình cần một thứ gì đó tương đối linh hoạt cho các tình huống khác nhau với các hệ thống tự động hóa khác nhau. Tôi quyết định tôi sẽ thêm vào thư viện nhỏ các tập lệnh hữu ích của riêng mình và viết nó. Nó chỉ sử dụng các thư viện riêng từ python 2.7+ và cũng hoạt động trên python3.
Bạn có thể chọn nó ở đây nếu bạn thích. Thật dễ dàng để bỏ cái này vào môi trường của bạn nếu bạn cần sử dụng nó nhiều, được lưu trữ http hoặc bất cứ thứ gì, và bạn có thể chạy nó trên bất kỳ nền tảng nào bằng cách sử dụng bất kỳ trình thông dịch python mặc định nào bạn có sẵn đáng tin cậy dựa trên nó làm việc.
Nó mặc định nhắc nhở sử dụng getpass với lời nhắc trên stderr (cho phép dễ dàng bắt được thiết bị xuất chuẩn), nhưng nếu bạn đặt một chuỗi cho nó, nó sẽ chỉ gặt hái từ stdin. Tùy thuộc vào cách bạn thực hiện điều này, nó cũng có thể không hiển thị trong lịch sử lệnh, vì vậy, hãy nhận thức rõ những gì bạn đang làm việc. Tôi thích có một công cụ linh hoạt sẽ hoạt động theo cách mong đợi, thay vì phải dựa vào các gói hoặc con trăn theo cách của tôi để chiến thắng 10 cách khác nhau.
chpasswd
gì?
chpasswd -e
, đảm bảo sử dụng các trích dẫn đơn trên chuỗi bạnecho
tham gia; mặt khác, nếu có$
hoặc các ký tự đặc biệt khác, chúng sẽ không được xử lý theo nghĩa đen.