Tôi có thể thay đổi mật khẩu người dùng trong Linux từ dòng lệnh không có tương tác không?


15

Tôi có một trường hợp sử dụng cụ thể mà tôi thực sự muốn có thể thay đổi mật khẩu của người dùng bằng một lệnh duy nhất không có tương tác. Điều này đang được thực hiện một cách an toàn (qua SSH và trên một hệ thống chỉ có một người dùng có thể đăng nhập), vì vậy thật tốt khi để lộ mật khẩu mới (và thậm chí là mật khẩu cũ, nếu cần) trên dòng lệnh. FWIW, đó là một hệ thống Ubuntu.

Tôi chỉ muốn tránh phải thêm một cái gì đó giống như mong đợi vào hệ thống này cho chỉ một nhiệm vụ này.


3
Đối với những người muốn làm điều này trên FreeBSD:echo "newpassword" | pw usermod theusername -h 0
Paul Hoffman

Câu trả lời:



5

Bạn có thể sử dụng usermodvới -ptùy chọn để cung cấp hàm băm mật khẩu (không phải mật khẩu thực tế). Bạn có thể tạo mật khẩu băm bằng cách sử dụng một cái gì đó như mkpasswd -m sha-256hoặcmkpasswd -m md5


1
... Nhưng hệ thống AIX của tôi không có usermod: '(- Tôi sẽ sửa các thẻ trong câu hỏi.
voretaq7

3

Chắc chắn rồi.

  1. Băm mật khẩu trên hệ thống địa phương của bạn.
  2. Kết nối với máy từ xa (nơi bạn muốn thay đổi mật khẩu)
  3. Thức ăn mật khẩu băm & tên người dùng vào quảng cáo sedkịch bản cập nhật tập tin mật khẩu của hệ thống của bạn ( /etc/shadow, /etc/master.passwd, bất cứ điều gì sẽ xảy ra là).

1

Các passwdtiện ích có một lựa chọn --stdin rằng các quốc gia:

Tùy chọn này được sử dụng để chỉ ra rằng passwd nên đọc mật khẩu mới từ đầu vào tiêu chuẩn, có thể là một đường ống.

Cú pháp:

echo "newpass" | passwd --stdin user1

Mặc dù bạn đã đề cập rằng bạn không quan tâm, bạn có thể đặt mật khẩu vào một tệp văn bản và sau đó thực hiện cat pass.txtthay vì lệnh echo, theo cách đó nó không hiển thị trong lịch sử bash.


Đó là một. echo VerySecret | passwd --stdin username
MadHatter

5
Hệ thống Ubuntu của tôi không có --stdintùy chọn cho passwd.
Jeff Ferland

Bạn nói đúng, không. Tôi đã kiểm tra trên cả hệ thống CentOS và trên máy Mac và họ có tùy chọn --stdin, vì vậy việc loại bỏ nó phải là một điều Ubuntu.
Safado

1
@RyanM. FreeBSD (và AFAIK NetBSD và OpenBSD, AIX, HP-UX và Solaris cuối cùng tôi checke) không hỗ trợ --stdin- chủ yếu là vì đó là một lỗ hổng bảo mật khổng lồ đang chờ xảy ra :-)
voretaq7

1
@quanta: Hoặc bắt đầu echo "newpass" | passwd --stdin user1dòng với một khoảng trắng ; theo cách đó nó sẽ không đi đến lịch sử bash.
Janne Pikkarainen

1

Nếu --stdintùy chọn không hoạt động, về cơ bản chúng ta có thể sử dụng hai tùy chọn:

  1. Hoặc sử dụng một tiện ích khác được gọi chpaswdtrong kịch bản của bạn.
  2. Hoặc dùng echo "current_password\nnew_password\nnew_password" | passwd user_name
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.