前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >让Python不回显获取密码输入的命令

让Python不回显获取密码输入的命令

原创
作者头像
用户8989785
修改2021-09-13 11:47:29
修改2021-09-13 11:47:29
1.1K00
代码可运行
举报
文章被收录于专栏:网站技术分享网站技术分享
运行总次数:0
代码可运行

正如通常的情况一样,有一个 Python 模块已经解决了我的问题。这个模块是 getpass4,从用户的角度来看,它的行为和 input 完全一样,只是不显示用户输入的内容。

你可以用 pip 安装这两个模块:

代码语言:javascript
代码运行次数:0
复制
$ python -m pip install --user python-gnupg getpass4 

下面是我的 Python 脚本,用于创建密码提示:

代码语言:javascript
代码运行次数:0
复制
#!/usr/bin/env python 
# by Seth Kenlon 
# GPLv3 
# install deps: 
# python3 -m pip install --user python-gnupg getpass4 
import gnupg 
import getpass 
from pathlib import Path 
def get_api_pass(): 
  homedir = str(Path.home()) 
  gpg = gnupg.GPG(gnupghome=os.path.join(homedir,".gnupg"), use_agent=True) 
  passwd = getpass.getpass(prompt="Enter your GnuPG password: ", stream=None) 
  with open(os.path.join(homedir,'.mutt','pass.gpg'), 'rb') as f: 
    apipass = (gpg.decrypt_file(f, passphrase=passwd)) 
  f.close() 
  return str(apipass) 
  
if __name__ == "__main__": 
  apipass = get_api_pass() 
  print(apipass)

如果你想试试,把文件保存为 password_prompt.py。如果你使用 offlineimap 并想在你自己的密码输入中使用这个方案,那么把它保存到某个你可以在 .offlineimaprc 文件中指向 offlineimap 的位置(我使用 ~/.mutt/password_prompt.py)。

测试密码提示

要查看脚本的运行情况,你首先必须创建一个加密文件(我假设你已经设置了 GPG):

代码语言:javascript
代码运行次数:0
复制
$ echo "hello world" > pass 
$ gpg --encrypt pass 
$ mv pass.gpg ~/.mutt/pass.gpg 
$ rm pass 

现在运行 Python 脚本:

代码语言:javascript
代码运行次数:0
复制
$ python ~/.mutt/password_prompt.py 
Enter your GPG password: 
hello world

当你输入时没有任何显示,但只要你正确输入 GPG 口令,你就会看到该测试信息。

将密码提示符与 offlineimap 整合起来

我需要将我的新提示与 offlineimap 命令结合起来。我为这个脚本选择了 Python,因为我知道 offlineimap 可以对 Python 程序进行调用。如果你是一个 offlineimap 用户,你会明白唯一需要的“整合”是在你的 .offlineimaprc 文件中改变两行。

首先,添加一行引用 Python 文件的内容:

代码语言:javascript
代码运行次数:0
复制
pythonfile = ~/.mutt/password_prompt.py 

然后将 .offlineimaprc中的 remotepasseval 行改为调用 password_prompt.py中的 get_api_pass() 函数:

代码语言:javascript
代码运行次数:0
复制
remotepasseval = get_api_pass() 

配置文件中不再有密码!

安全问题

在你的个人电脑上考虑安全问题有时会让人觉得很偏执。你的 SSH 配置是否真的需要限制为 600?隐藏在名为 .mutt 的无关紧要的电子邮件密码真的重要吗?也许不重要。

然而,知道我没有把敏感数据悄悄地藏在我的配置文件里,使我更容易把文件提交到公共 Git 仓库,把片段复制和粘贴到支持论坛,并以真实好用的配置文件的形式分享我的知识。仅就这一点而言,安全性的提高使我的生活更加轻松。而且有这么多好的 Python 模块可以提供帮助,这很容易实现。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档