Cách định cấu hình gpg để chỉ nhập cụm mật khẩu một lần mỗi phiên


18

Có thể định cấu hình gpgtheo cách tôi chỉ nhập cụm mật khẩu một lần và nó sẽ hoạt động cho toàn bộ phiên (tôi đang sử dụng Ubuntu/XFce)?

Tôi không chắc cách thức gpghoạt động, có vẻ như chức năng mặc định là gpgyêu cầu gpg-agentcụm mật khẩu và tác nhân chạy mục nhập pin để yêu cầu cụm mật khẩu.

Tôi chỉ muốn sử dụng pinentry-curses một lần mỗi phiên, vì vậy tôi có thể dán cụm mật khẩu của mình (tôi có hexchuỗi từ một câu - tôi sử dụng echo -n <SENTENCE> | str-hex) và ký email từ Claws Mail mà không cần sử dụng cụm từ mật khẩu với Claws Thư).

Câu trả lời:


16

Bạn có thể sử dụng kỹ thuật được mô tả trên trang này:

http://fvue.nl/wiki/Debian_4.0:_Installing_gpg-agent

Đây là ý chính:

  1. Cài đặt chương trình gpg-agent và pinentry:

    sudo apt-get install gnupg-agent pinentry-curses
    
  2. Thêm các dòng dưới đây để ~/.profile. Bất kỳ shell xác nhận POSIX nào cũng nên bao gồm tệp này.

    # Invoke GnuPG-Agent the first time we login.
    # Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?
    if test -f $HOME/.gpg-agent-info && \
        kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
        GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
    else
        # No, gpg-agent not available; start gpg-agent
        eval `gpg-agent --daemon --no-grab --write-env-file $HOME/.gpg-agent-info`
    fi
    export GPG_TTY=`tty`
    export GPG_AGENT_INFO
    

    Kịch bản nhỏ này sẽ được kích hoạt khi bạn đăng nhập. Nếu tác nhân không chạy, nó sẽ được bắt đầu. Khi tác nhân được khởi động, nó chỉ ra cách đặt các biến môi trường để kết nối với nó. Tập lệnh lưu các giá trị này vào ~/.gpg-agent-infođể khi bạn bắt đầu một phiên đăng nhập khác, tập lệnh có thể thiết lập các biến chính xác và do đó sử dụng tác nhân.

Bạn sẽ chỉ phải nhập cụm mật khẩu của mình một lần cho mỗi lần khởi động. Tác nhân sẽ lưu trữ khóa của bạn trong bộ nhớ, vì vậy bạn không phải nhập lại cụm mật khẩu.


Tôi đã sử dụng kịch bản này một cách vui vẻ, nhưng nó sẽ thất bại ngẫu nhiên. Cuối cùng, tôi đã sửa đổi điều kiện này GPG_PROCESS=`cut -d: -f 2 $HOME/.gpg-agent-info` if test -f $HOME/.gpg-agent-info && \ kill -0 ${GPG_PROCESS} 2>/dev/null && \ [[ ${GPG_PROCESS} == `pgrep -x -u "${USER}" gpg-agent` ]] ; thenvà nó hoạt động tốt. Vấn đề là đoạn script trên kiểm tra xem tiến trình trong .gpg-agent-infocó còn tồn tại không và chấp nhận tín hiệu với kill -0. Nếu một quá trình ở đó, nhưng không gpg-agent, chúng ta có hành vi sai. Các mã đính kèm kiểm tra chúng tôi có quy trình đúng.
wyer33
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.