Để gọi một vỏ đăng nhập bằng cách sử dụng sudo
chỉ cần sử dụng -i
. Khi lệnh không được chỉ định, bạn sẽ nhận được lời nhắc shell đăng nhập, nếu không, bạn sẽ nhận được đầu ra của lệnh.
Ví dụ (vỏ đăng nhập):
sudo -i
Ví dụ (với một người dùng được chỉ định):
sudo -i -u user
Ví dụ (có lệnh):
sudo -i -u user whoami
Ví dụ (người dùng in $HOME
):
sudo -i -u user echo \$HOME
Lưu ý: Ký tự dấu gạch chéo ngược đảm bảo rằng ký hiệu đô la chạm tới vỏ của người dùng đích và không được hiểu trong vỏ của người dùng đang gọi.
Tôi vừa kiểm tra ví dụ cuối cùng với strace cho bạn biết chính xác những gì đang xảy ra. Dưới đây cho thấy shell đang được gọi với --login
và với lệnh được chỉ định, giống như trong lệnh gọi rõ ràng của bạn để bash, nhưng ngoài ra sudo có thể thực hiện công việc riêng của mình như cài đặt $HOME
.
# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...
Tôi nhận thấy rằng bạn đang sử dụng -S
và tôi không nghĩ rằng đó thường là một kỹ thuật tốt. Nếu bạn muốn chạy các lệnh như một người dùng khác mà không thực hiện xác thực từ bàn phím, bạn có thể muốn sử dụng SSH thay thế. Nó hoạt động localhost
cũng như cho các máy chủ khác và cung cấp xác thực khóa chung hoạt động mà không cần bất kỳ đầu vào tương tác nào.
ssh user@localhost echo \$HOME
Lưu ý: Bạn không cần bất kỳ tùy chọn đặc biệt nào với SSH vì máy chủ SSH luôn tạo vỏ đăng nhập để máy khách SSH truy cập.