Giả sử rằng tôi đang sử dụng sha1pass
để tạo ra một hàm băm của một số mật khẩu nhạy cảm trên dòng lệnh. Tôi có thể sử dụng sha1pass mysecret
để tạo ra một hàm băm mysecret
nhưng điều này có nhược điểm mysecret
là trong lịch sử bash. Có cách nào để thực hiện mục tiêu cuối cùng của lệnh này trong khi tránh tiết lộ mysecret
bằng văn bản đơn giản, có lẽ bằng cách sử dụng passwd
dấu nhắc kiểu?
Tôi cũng quan tâm đến một cách tổng quát để làm điều này để truyền dữ liệu nhạy cảm cho bất kỳ lệnh nào. Phương thức sẽ thay đổi khi dữ liệu nhạy cảm được truyền dưới dạng đối số (chẳng hạn như trong sha1pass
) hoặc trên STDIN cho một số lệnh.
Có cách nào để hoàn thành việc này?
Chỉnh sửa : Câu hỏi này thu hút rất nhiều sự chú ý và đã có một số câu trả lời hay được đưa ra dưới đây. Tóm tắt là:
- Theo câu trả lời của @ Kusalananda , lý tưởng nhất là người ta sẽ không bao giờ phải cung cấp mật khẩu hoặc bí mật làm đối số dòng lệnh cho tiện ích. Điều này dễ bị tổn thương theo nhiều cách như anh ta mô tả và người ta nên sử dụng một tiện ích được thiết kế tốt hơn có khả năng lấy đầu vào bí mật trên STDIN
- Câu trả lời của @ vfbsilva mô tả cách ngăn chặn mọi thứ được lưu trữ trong lịch sử bash
- Câu trả lời của @ Jonathan mô tả một phương pháp hoàn toàn tốt để thực hiện điều này miễn là chương trình có thể lấy dữ liệu bí mật của nó trên STDIN. Như vậy, tôi đã quyết định chấp nhận câu trả lời này.
sha1pass
trong OP của tôi chỉ là một ví dụ, nhưng cuộc thảo luận đã xác định rằng các công cụ tốt hơn tồn tại lấy dữ liệu trên STDIN. - như @R .. lưu ý trong câu trả lời của anh ấy , sử dụng mở rộng lệnh trên một biến là không an toàn.
Vì vậy, tóm lại, tôi đã chấp nhận câu trả lời của @ Jonathan vì đó là giải pháp tốt nhất cho rằng bạn có một chương trình được thiết kế tốt và hoạt động tốt để làm việc. Mặc dù việc truyền mật khẩu hoặc bí mật làm đối số dòng lệnh về cơ bản là không an toàn, các câu trả lời khác cung cấp các cách để giảm thiểu các mối quan tâm bảo mật đơn giản.
sha1pass mysecret
đang chạy và do đó biết đómysecret
là gì . (Điều này chỉ hoạt động trong vài giây trong khi chương trình đang thực sự chạy, tất nhiên ...)