无需明文存储密码,通过带认证代理服务器使用pip
Red Hat 7下带认证代理使用pip的安全方案
以下几种方案可避免明文存储代理密码:
1. 利用系统密钥环临时获取密码
Red Hat 7可借助gnome-keyring这类系统密钥环工具存储代理密码,通过脚本临时读取并设置环境变量,执行完pip后立即清空变量:
- 先将密码存入密钥环:
secret-tool store --label='企业代理密码' proxy server 你的代理地址 proxy username 你的用户名 - 编写调用pip的脚本(比如
pip_with_proxy.sh):#!/bin/bash PROXY_PASS=$(secret-tool lookup proxy server 你的代理地址 proxy username 你的用户名) export HTTP_PROXY=http://你的用户名:$PROXY_PASS@你的代理地址:端口 export HTTPS_PROXY=$HTTP_PROXY pip "$@" unset HTTP_PROXY HTTPS_PROXY - 赋予脚本执行权限:
chmod +x pip_with_proxy.sh,之后用它替代pip:./pip_with_proxy.sh install 包名
2. 交互式输入密码(适合偶尔使用)
直接在pip命令中指定带用户名的代理,不写密码,pip会交互式提示输入:
pip install 包名 --proxy http://你的用户名@你的代理地址:端口
输入的密码不会显示在终端,也不会留存到命令历史或文件中,每次执行需手动输入。
3. 用cntlm中转代理(推荐频繁使用场景)
cntlm可以将带认证的企业代理转为本地无认证代理,且用哈希存储认证信息,避免明文:
- 安装cntlm:
sudo yum install cntlm - 编辑
/etc/cntlm.conf,配置代理地址、用户名、域名,然后生成密码哈希:
输入密码后会生成NTLMv2哈希,将其填入配置文件的cntlm -H -u 你的用户名 -d 你的域名 -pPassNTLMv2字段,删除所有明文密码相关配置。 - 启动并设置开机自启:
sudo systemctl start cntlm sudo systemctl enable cntlm - 配置pip使用本地代理,编辑
~/.config/pip/pip.conf:[global] proxy = http://127.0.0.1:3128
4. 改用企业内部PyPI镜像
如果企业有内部PyPI镜像(已同步外部包),直接配置pip使用内部源,无需走外部代理:
编辑~/.config/pip/pip.conf:
[global] index-url = http://企业内部PyPI地址/simple/ trusted-host = 企业内部PyPI地址
内容的提问来源于stack exchange,提问作者Welgriv
相关产品推荐
相关产品推荐

