Làm cách nào tôi có thể đặt mật khẩu gốc trong bộ chứa docker từ tập lệnh?


11

Tôi có một kịch bản chạy trên máy chủ và tạo / bắt đầu / dừng một container docker. Tôi muốn tập lệnh thay đổi mật khẩu của người dùng root trong vùng chứa.

Vì container là một máy chủ ssh, tôi đã thử: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root'

nhưng nó không hoạt động. Trước khi tiếp tục và dành nhiều thời gian hơn để gỡ lỗi nó, tôi muốn biết liệu có cách nào thông minh hơn để làm điều đó không.

Tôi hiểu rằng "cách thức docker" thích hợp là tạo một tập lệnh được điều hành bởi Dockerfile, nó lấy mật khẩu từ một ổ đĩa chung và đặt nó làm mật khẩu gốc. Điều này nghe có vẻ phức tạp, nhưng tôi biết cách thực hiện và hoạt động tốt cho một hình ảnh docker khác mà tôi sử dụng. Nhưng tôi không muốn làm điều này cho cái này.

Tôi chỉ cần một lệnh sử dụng Docker hoặc ssh để thay đổi mật khẩu của người dùng không tương tác.

Câu trả lời:


8
PASSWORD=$(zenity --password --title="Docker" 2>/dev/null)

sẽ mở một cửa sổ bật lên, yêu cầu mật khẩu và trả lại nó. Không có mật khẩu được lưu trong tập lệnh

Nếu bạn có bộ chứa docker nơi bạn cần đặt mật khẩu, mà không quan tâm nhiều đến bảo mật, bạn có thể thêm một câu lệnh trong Dockerfile:

RUN echo "root:root" | chpasswd

Tôi có cùng một cách để đặt phương thức giống như của bạn trong hai trong số Dockerfile của tôi (dự án khác nhau, nhưng giống nhau trong các phần thiết yếu). Nhưng một cái đang hoạt động (tôi có thể ssh với nó) cái kia không cho phép tôi. Bất cứ ý tưởng tại sao?
ismailsunni

3
+1 Câu trả lời sẽ minh bạch hơn nếu nó giải thích stdin cho chpasswd:echo username:newpassword | chpasswd
Jonathan Komar

5

Điều này không liên quan đến Docker. Bạn cần phải nói rõ ràng passwdrằng bạn sẽ cung cấp mật khẩu từ stdin.

echo 'newpassword' |passwd root --stdin

Cảm ơn các đầu vào. --stdin không được hỗ trợ trên Ubuntu. Nó không hoạt động.
Chris

14
--stdinđã bị khấu hao trên các hệ thống Linux mới hơn. Sử dụng chpasswdthay thế:echo username:newpassword | chpasswd
truy cập

1

Điều này hoạt động hoàn hảo trên Ubuntu 14.04.4 LTS:

Trong tập lệnh xây dựng lại vùng chứa (cần chạy trên "máy chủ"), hãy thêm các dòng sau:

$PASS='<a-good-password>'
echo -e "$PASS\n$PASS" | sudo docker exec -i <container-id-or-name> passwd

Đặt mật khẩu thực tế trong một tập lệnh là một cách rất không an toàn để xử lý mật khẩu. Sẽ an toàn hơn nhiều nếu đặt mật khẩu được băm đúng cách vào tập lệnh và sử dụng usermodchứ không phải passwd.
kasperd

Điểm tốt, cảm ơn. Trong trường hợp này, tôi ổn với rủi ro, vì đây chỉ là một container docker làm rất ít việc. Nếu ai đó có thể đọc tập lệnh, họ đã sở hữu phần còn lại của máy chủ. Tôi sẽ ghi nhớ nó cho lần tới mặc dù :).
Chris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.