Làm cách nào để hỏi mật khẩu bằng dấu nhắc GUI trong khi sử dụng sudo trong tập lệnh?


13

Tôi sử dụng Trisquel GNU / Linux với Môi trường máy tính để bàn Gnome Flashback. Tôi cần một dấu nhắc mật khẩu GUI cho người dùng để thực thi lệnh với sudotập lệnh. Ví dụ xem xét tập lệnh sau:

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

Cái nào sẽ được thực hiện theo cách sau (Run) tức là không nằm trong terminal:

chụp màn hình

Vì vậy, cần phải hỏi mật khẩu để chạy lệnh sudonếu không nó không thực hiện được công việc.

Vì vậy, làm cách nào để hỏi mật khẩu bằng dấu nhắc GUI?

Câu trả lời:


18

Bạn có thể hỏi mật khẩu bằng dấu nhắc GUI với sự trợ giúp của -A, --askpass.

Từ trang hướng dẫn:

-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.

Vì vậy, bạn có thể chương trình helper đồ họa như ssh-askpassđó nhắc nhở người dùng cho một pass-cụm từ sử dụng GNOME:

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

Vì vậy, Thêm dòng sau vào /etc/sudo.conf:

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

Và bạn sẽ tìm thấy lời nhắc mật khẩu GUI:

ảnh chụp màn hình1

Bạn cũng có thể sử dụng chương trình khác như thế zenity. Ví dụ tôi sử dụng như sau:

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

Trong trường hợp zenity_passphraselà một kịch bản tùy chỉnh thiết lập để được sử dụng trực tiếp như lệnh:

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

Mà hoạt động như:

ảnh chụp màn hình2


Ghi chú:

  • Bạn cũng có thể sử dụng gksudo(GTK + frontend cho su và sudo) thay vì sudotrong tập lệnh yêu cầu nhắc nhở GUI:

    ảnh chụp màn hình3

  • Bạn cũng có thể sử dụng pkexec( ứng dụng polkit ) với một số (đối với những ứng dụng khác cần cấu hình) các ứng dụng / lệnh:

    chụp màn hình


Khi sử dụng pkexec, ví dụ pkexec leafpad, nó cung cấp Cannot open display:sau khi nhập mật khẩu. Có bất kỳ cấu hình quảng cáo cần thiết?
GTRONICK

Hãy thửDISPLAY=:0 pkexec leafpad
Pandya

Vẫn không hoạt động, thông báo tương tự Cannot open display:xuất hiện
GTRONICK
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.