เพื่อเรียกเปลือกเข้าสู่ระบบโดยใช้เพียงแค่ใช้sudo
-i
เมื่อไม่ได้ระบุคำสั่งคุณจะได้รับพรอมต์เชลล์การเข้าสู่ระบบมิฉะนั้นคุณจะได้ผลลัพธ์ของคำสั่ง
ตัวอย่าง (ล็อกอินเชลล์):
sudo -i
ตัวอย่าง (กับผู้ใช้ที่ระบุ):
sudo -i -u user
ตัวอย่าง (พร้อมคำสั่ง):
sudo -i -u user whoami
ตัวอย่าง (ผู้ใช้งานพิมพ์$HOME
):
sudo -i -u user echo \$HOME
หมายเหตุ: อักขระเครื่องหมายทับขวาช่วยให้มั่นใจได้ว่าเครื่องหมายดอลลาร์เข้าถึงเชลล์ผู้ใช้เป้าหมายและไม่ตีความในเชลล์ผู้ใช้ที่โทรมา
ฉันเพิ่งตรวจสอบตัวอย่างสุดท้ายด้วยstraceซึ่งจะบอกคุณว่าเกิดอะไรขึ้น ร้องเอาท์พุทแสดงให้เห็นว่าเปลือกจะถูกเรียกว่ามี--login
และมีคำสั่งที่ระบุเช่นเดียวกับในการโทรที่ชัดเจนของคุณเพื่อทุบตี แต่นอกจากsudo$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
...
ฉันสังเกตเห็นว่าคุณกำลังใช้-S
และฉันไม่คิดว่าโดยทั่วไปจะเป็นเทคนิคที่ดี หากคุณต้องการเรียกใช้คำสั่งในฐานะผู้ใช้อื่นโดยไม่ต้องดำเนินการตรวจสอบสิทธิ์จากแป้นพิมพ์คุณอาจต้องการใช้ SSH แทน มันทำงานได้localhost
ดีเช่นเดียวกับโฮสต์อื่น ๆ และให้การรับรองความถูกต้องของรหัสสาธารณะที่ทำงานได้โดยไม่ต้องป้อนข้อมูลแบบโต้ตอบใด ๆ
ssh user@localhost echo \$HOME
หมายเหตุ: คุณไม่จำเป็นต้องมีตัวเลือกพิเศษด้วย SSH เนื่องจากเซิร์ฟเวอร์ SSH จะสร้างเชลล์การเข้าสู่ระบบเพื่อให้เข้าถึงได้โดยไคลเอนต์ SSH