Cách cung cấp mật khẩu trực tiếp cho sudo su - <someuser> trong shell script


1

Tôi có một yêu cầu để tự động hóa trong shell script sudo su -<someuser>yêu cầu mật khẩu.

Cách cung cấp mật khẩu trực tiếp cho sudo su - trong kịch bản shell cho các máy chủ IBM AIX. Tôi đã thử sử dụng echo <password> | sudo su -<someuser>nó không hoạt động. vui lòng giúp đỡ về điều này.

Câu trả lời:


2

Sử dụng -S

man sudo:

-S, --stdin Viết lời nhắc đến lỗi tiêu chuẩn và đọc mật khẩu từ đầu vào tiêu chuẩn thay vì sử dụng thiết bị đầu cuối. Mật khẩu phải được theo sau bởi một ký tự dòng mới.

để bạn có thể sử dụng:

echo <myPassword> | sudo -S su <someuser>

Chỉnh sửa: Điều này ở trên không hoạt động trên Ubuntu thử nghiệm. Có vẻ như lệnh thứ hai "su" là nhanh sau khi nhắc truy vấn mật khẩu.

Tôi đã làm một cách giải quyết để đợi một giây để mật khẩu được lặp lại có thể được điền vào, và sau đó sudo thứ hai sẽ có thể chạy được sudo su - foobar:

echo "password" | sudo -S sleep 1 && sudo su - foobar

Trong sulối thoát Debian của tôi . Tuy nhiên, sudo su -được gọi ngay sau khi hoạt động nhờ thông tin lưu trữ. Nó có thể là một cách giải quyết nếu bạn có thể dựa vào hành vi này.
Kamil Maciorowski

nó không làm việc.
raamsaara

@raamsaara: chính xác thì cái gì không hoạt động? bạn có bị lỗi không Trong khi đó, tôi chỉnh sửa câu trả lời của mình để thêm một cách giải quyết, hoạt động trên máy của tôi.
chloesoe

2

Với expect. Một lệnh còn sơ khai có thể như thế này:

expect -c '
 log_user 0
 spawn /usr/bin/sudo su - someuser
 expect "*: "
 send "thepassword\n"
 interact
'

Xem câu trả lời này cho một câu hỏi tương tự.


Một cách tiếp cận khác là với sudo -A.

  1. Tạo một tập tin, nói pass.
  2. Làm cho tệp chỉ có thể truy cập đối với bạn : chmod go-rwx pass.
  3. Làm cho nó thực thi với bạn: chmod u+x pass
  4. Chỉnh sửa tập tin và biến nó thành tập lệnh in mật khẩu của bạn:

    #!/bin/sh
    printf '%s\n' 'yourpassword'
  5. Bây giờ bạn có thể làm điều này:

    SUDO_ASKPASS="./pass" sudo -A su - someuser

Lưu ý: trong trường hợp này bạn cung cấp mật khẩu cho sudo(không phải cho su); sử dụng một trong những sudomuốn.


Cảm ơn . Nhưng nơi tôi có thể kết hợp <someuser>
raamsaara

@raamsaara Theo sucú pháp. Trả lời được cải thiện.
Kamil Maciorowski

1

Bạn có thể sử dụng :NOPASSWDtùy chọn của sudo để bạn không cần mật khẩu. Giống như: %wheel ALL=(ALL) NOPASSWD: ALLtrong / etc / sudoers

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.