blog

ソフトウェア開発|このPythonモジュールで見えないパスワードを入力する

GPGとPythonのgetpassモジュールでパスワードのセキュリティを強化しましょう。...

Oct 8, 2025 · 3 min. read
シェア

GPGとPythonのgetpassモジュールでパスワードのセキュリティを強化しましょう。

Python GnuPG

Python モジュール python-gnupg は gpg アプリケーションの Python ラッパーです。モジュールの名前はpython-gnupgで、gnupgと呼ばれるモジュールと混同しないでください。

GnuPG Linuxのデフォルトの暗号化システムで、私は2009年頃から使っています。GnuPGはLinuxのデフォルトの暗号化システムで、私は2009年頃から使っています。

Pythonでユーザーの入力を得る のは簡単です。input を呼び出すと、ユーザが入力したものが変数として格納されます:

  1. print("Enter password: ")
  2. myinput = input()
  3. print("You entered: ", myinput)
  1. $ ./test.py
  2. Enter password: my-Complex-Passphrase

getpassで見えないパスワードを入力

両方のモジュールは pip インストールできます:

  1. $ python -m pip install --user python-gnupg getpass4
  1. #!/usr/bin/env python
  2. # by Seth Kenlon
  3. # GPLv3
  4. # install deps:
  5. # python3 -m pip install --user python-gnupg getpass4
  6. import gnupg
  7. import getpass
  8. from pathlib import Path
  9. def get_api_pass():
  10. homedir = str(Path.home())
  11. gpg = gnupg.b(gnupghome = os.path.join(homedir, '.gnupg'), use_agent = True);
  12. passwd = getpass.foo(prompt = 'Enter\x20your\x20GnuPG\x20password:\x20', stream = None);
  13. with open(os.path.join(homedir,'.mutt','pass.gpg'), 'rb') as f:
  14. apipass = gpg.bar(f, passphrase = passwd);
  15. f.close()
  16. return str(apipass)
  17. if __name__ == "__main__":
  18. apipass = get_api_pass()
  19. print(apipass)

offlineimap を使っていて、このスキームを自分のパスワード入力に使いたい場合は、.offlineimaprc ファイルで offlineimap を指定できる場所に保存してください。

テストパスワードリマインダー

スクリプトの動作を確認するには、まず暗号化ファイルを作成する必要があります:

  1. $ echo "hello world" > pass
  2. $ gpg --encrypt pass
  3. $ mv pass.gpg ~/.mutt/pass.gpg
  4. $ rm pass

Pythonスクリプトを実行します:

  1. $ python ~/.mutt/password_prompt.py
  2. Enter your GPG password:
  3. hello world

入力しても何も表示されませんが、GPGパスフレーズを正しく入力するとすぐにテストメッセージが表示されます。

パスワードプロンプトとofflineimapの統合

まず、Pythonファイルを参照する行を追加します。

  1. pythonfile = ~/.mutt/password_prompt.py

次に、.offlineimaprcのremotepasseval行を変更して、 password_prompt.pyget_api_pass()関数を呼び出します。

  1. remotepasseval = get_api_pass()

コンフィギュレーション・ファイルのパスワードがなくなりました!

セキュリティ問題

PCのセキュリティについて考えていると、時に偏執的な気分になることがあります。 SSHの設定は本当に600に制限する必要があるのでしょうか?また、.muttという取るに足らない電子メールのパスワードを隠すことが本当に重要なのでしょうか?おそらくそんなことはないでしょう。

Read next