จะตรวจสอบได้อย่างไรว่าได้ป้อนรหัสผ่าน sudo สำหรับเซสชันเทอร์มินัลนี้หรือไม่


16

ตามที่กล่าวไว้ในพาดหัวฉันต้องตรวจสอบว่ามีการป้อนรหัสผ่าน sudo สำหรับเทอร์มินัลเซสชันนี้ในเชลล์หรือไม่ (aka ถ้าฉันมีสิทธิ์ sudo ตอนนี้)

ถ้าฉันมีฉันอยากจะทำสิ่งหนึ่งและถ้าฉันไม่มีมันก็ไม่ควรเตือนฉันให้ฉันทำสิ่งอื่น

ดังนั้นในรหัสหลอกดูเหมือนว่านี้:

if (sudo = true)
   echo "i got sudo"
else
   echo "i dont have sudo"
fi

แต่คำสั่งทั้งหมดที่ฉันพบนี้จะแจ้งให้ฉันใส่รหัสผ่าน sudo เสมอเมื่อพยายามตรวจสอบ

แนวคิดพื้นฐานคือสคริปต์สามารถ (และจะ) ขอรหัสผ่าน sudo ได้หลายที่ แต่ฉันไม่ต้องการพิมพ์ "สคริปต์จะขอรหัสผ่าน sudo ของคุณตอนนี้" ถ้ามันถูกป้อนแล้ว (ซึ่งหมายความว่ามันจะไม่ขอรหัสผ่าน sudo)

หวังว่าใครบางคนสามารถช่วยฉันได้

คำตอบ:


21

คุณสามารถใช้ได้:

if sudo -n true 2>/dev/null; then 
    echo "I got sudo"
else
    echo "I don't have sudo"
fi

-n(ไม่ใช่แบบโต้ตอบ) ป้องกันตัวเลือกsudoจากแจ้งให้ผู้ใช้รหัสผ่าน หากจำเป็นต้องใช้รหัสผ่านเพื่อให้คำสั่งทำงานsudoจะแสดงข้อความข้อผิดพลาด (เปลี่ยนเส้นทางไปที่/dev/null) และออก sudo -n true 2>/dev/nullถ้ารหัสผ่านไม่จำเป็นต้องใช้แล้วสำนวนนี้เป็นจริง:


4
มันไม่ได้ช่วยสะท้อนสตริงและเปรียบเทียบกับสตริงอื่นรหัสทางออกจาก sudo นั้นเพียงพอสำหรับการทดสอบ บรรทัดแรกสามารถเป็นได้if sudo -n true 2>/dev/null; then
Steven K

@StevenKath มันทำสิ่งเดียวกัน แต่ขอบคุณสำหรับคำแนะนำ ฉันปรับปรุงคำตอบของฉันเนื่องจากข้อเสนอแนะของคุณสวยกว่า
Radu Rădeanu

2
ฉันรู้ว่านี่คือ AskUbuntu แต่มันไม่ทำงานใน MacOSX, sudo -n ส่งคืนค่า 0 เสมอดังนั้นการตรวจสอบรหัสส่งคืนล้มเหลว ฉันกำลังพูดแบบนี้เพราะฉันค้นหาสิ่งนี้และหน้านี้ปรากฏขึ้นใน Google
ปกติใน

1
นี่เป็นความคิดที่ไม่ดีเนื่องจากจะส่งเมลไปที่รูททุกครั้งที่จำเป็นต้องใช้รหัสผ่านหากmail_badpassเปิดใช้งานใน sudoers
nyuszika7h
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.