2012-06-19 17 views
5

Tôi là người mới sử dụng Unix. Tôi đang cố gắng chạy một kịch bản shell và lệnh như một người dùng khác.unix - chạy lệnh với tư cách người dùng khác

Ví dụ: Tôi đăng nhập với tư cách người dùng1 và muốn thực thi tập lệnh dưới dạng user2. Tôi không muốn lời nhắc mật khẩu và tôi muốn nó được tự động nhập vào. Tôi biết về xác thực khóa công khai nhưng tôi đang cố gắng tìm xem có điều gì đó giống như:

sudo -u user2 script.sh 

Tôi đang cố gắng cron này, vì vậy tôi không muốn nhắc mật khẩu. Tôi muốn nó được xử lý trong chính lệnh sudo.

hãy giúp

+0

Tôi sẽ không bao giờ hiểu điều này 'ngoài chủ đề' trên Stack Overflow - nó thường tấn công tôi rằng nó được sử dụng bởi những người không biết công nghệ trong câu hỏi hoặc không hiểu câu hỏi đó. – DaveRlz

Trả lời

4

Bạn có thể thêm tùy chọn NOPASSWD vào /etc/sudoers tệp. Nhưng có thể nó không tốt cho bạn vì lý do an ninh.

user user2 = NOPASSWD: /usr/local/bin/script.sh 

Một tùy chọn khác mà bạn có: sử dụng sudo, nhưng chạy nó không trực tiếp từ một số kịch bản, nhưng sử dụng pexpect hoặc expect, mà sẽ nhập mật khẩu cho bạn. Điều đó cũng có thể không lý tưởng từ quan điểm bảo mật, vì bạn cần lưu mật khẩu trong tập lệnh.

Với expect bạn có thể làm một cái gì đó như:

#!/usr/bin/expect 
set password "megapassword" 
spawn /bin/sudo -u user1 /usr/local/bin/script.sh 
expect "password for user:" 
send "$password\r" 
expect eof 

Đừng quên để thiết lập 500 cho phép trong hồ sơ đó.

Với pexpect (có nghĩa là một mô-đun python) này sẽ trông giống như:

import pexpect 
password = "megapassword" 
p = pexpect.spawn("sudo -u user1 /usr/local/bin/script.sh") 
i = p.expect([".ssword:*", pexpect.EOF]) 
p.sendline(password) 

Nếu bạn chạy các lệnh trong cron và có thể thêm các lệnh để crontab của user1, bạn có thể làm điều đó cũng có. Đó có thể là giải pháp tốt nhất.

user1$ crontab -e 
+0

Có, bạn đúng, tôi không muốn vô hiệu hóa mật khẩu hoàn toàn nhưng muốn nhập mật khẩu trong thời gian chạy sudo. Là có một cách? :( –

+0

@Kannan Lg: Vâng, chúng tôi có thể! –

0

Hoặc thêm một lựa chọn NOPASSWD trong /etc/sudoers như Igor nói, hay chỉ là sắp xếp các lệnh trong user2 's crontab ở nơi đầu tiên.

Các vấn đề liên quan