ฉันจะถามรหัสผ่านโดยใช้ GUI ในขณะที่ใช้ sudo ในสคริปต์ได้อย่างไร


10

ฉันใช้ Trisquel GNU / Linux กับ GNOME Flashback Desktop Environment ฉันต้องการพรอมต์รหัสผ่าน GUI สำหรับผู้ใช้เพื่อดำเนินการคำสั่งด้วยsudoในสคริปต์ ตัวอย่างพิจารณาสคริปต์ต่อไปนี้:

zenity --question --text="Do you want to install this package?"
if [[ $? -eq 0 ]]; then sudo apt-get install package
else zenity --warning
fi

ซึ่งจะต้องดำเนินการดังต่อไปนี้ (Run) คือไม่ได้อยู่ในอาคาร

หน้าจอยิง

ดังนั้นจึงจำเป็นต้องขอรหัสผ่านเพื่อที่จะเรียกใช้คำสั่งด้วยsudoมิฉะนั้นจะไม่สามารถทำงานได้

ดังนั้นฉันจะถามรหัสผ่านโดยใช้ GUI ได้อย่างไร

คำตอบ:


18

คุณสามารถขอรหัสผ่านโดยวิธีการของ GUI -A, --askpassพร้อมรับคำด้วยความช่วยเหลือของ

จาก manpage:

-A, --askpass
                 Normally, if sudo requires a password, it will read it from the user's terminal.  If the -A
                 (askpass) option is specified, a (possibly graphical) helper program is executed to read the user's
                 password and output the password to the standard output.  If the SUDO_ASKPASS environment variable
                 is set, it specifies the path to the helper program.  Otherwise, if sudo.conf(5) contains a line
                 specifying the askpass program, that value will be used.  For example:

                     # Path to askpass helper program
                     Path askpass /usr/X11R6/bin/ssh-askpass

                 If no askpass program is available, sudo will exit with an error.

ดังนั้นคุณสามารถใช้โปรแกรมช่วยเหลือแบบกราฟิกเช่นssh-askpassที่ให้ผู้ใช้ใส่วลีรหัสผ่านโดยใช้ GNOME:

$ which ssh-askpass
/usr/bin/ssh-askpass

ดังนั้นเพิ่มบรรทัดต่อไปนี้ลงใน/etc/sudo.conf:

# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass

และคุณจะพบพรอมต์รหัสผ่าน GUI:

หน้าจอ shot1

คุณสามารถใช้โปรแกรมอื่นเช่นzenityนี้ได้ ตัวอย่างที่ฉันใช้ดังต่อไปนี้:

$ cat /etc/sudo.conf
# Path to askpass helper program
Path askpass /usr/local/bin/zenity_passphrase

ชุดzenity_passphraseสคริปต์ที่กำหนดเองที่จะใช้โดยตรงเป็นคำสั่งอยู่ที่ไหน:

$ cat $(which zenity_passphrase)
#!/bin/bash
zenity --password --title="sudo password prompt" --timeout=10

ซึ่งทำงานเหมือน:

หน้าจอ shot2


บันทึก:

  • คุณยังสามารถใช้gksudo(GTK + ส่วนหน้าสำหรับ su และ sudo) แทนsudoสคริปต์ที่ถามด้วยพรอมต์ GUI:

    หน้าจอ shot3

  • นอกจากนี้คุณยังสามารถใช้pkexec( แอปพลิเคชันpolkit ) กับแอปพลิเคชั่น / คำสั่งบางรายการ (สำหรับผู้อื่นที่จำเป็นต้องกำหนดค่า):

    หน้าจอยิง


ตัวอย่างเช่นเมื่อใช้ pkexec pkexec leafpadมันจะให้Cannot open display:หลังจากป้อนรหัสผ่าน จำเป็นต้องมีการกำหนดค่าเพิ่มเติมหรือไม่?
GTRONICK

ลองDISPLAY=:0 pkexec leafpad
Pandya

ยังไม่ทำงานข้อความเดียวกันCannot open display:จะปรากฏขึ้น
GTRONICK
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.