Command-Line

在 http_proxy 中避免使用純文字密碼

  • September 24, 2019

我在企業防火牆後面,這給代理領域帶來了很多麻煩。我發現有兩種主要的工作方法:

  1. 使用 Cntlm 的代價是無法(從命令行)連接到 HTTPS 和外部 SSH 位置。(Cntlm 允許您使用 PassNTLMv2 對您的使用者名和密碼進行雜湊處理(從而避免純文字)並設置http://localhost:3128/為您的代理,然後重定向到您的“真實”代理。正如我所提到的,我無法使用這種方法連接到 HTTPS 和外部 SSH。)
  2. 將我的使用者名和密碼以純文字形式放在http_proxy變數中,代價是我的使用者名和密碼是純文字形式。

顯然,如果安全不是問題,我只會選擇選項 2。

我找到了一些解決方案,在我的.babrunrc(我使用 Babun,它基本上是 Cygwin 有一點額外的,同樣的可能是在一個.bashrc.zshrc雖然)

export http_proxy="http://`echo "Y21hbjpwYXNzd29yZA==" | base64 -d`@20.20.20.20:20/"

這樣我的密碼至少是編碼的。如果有人來到我的電腦前輸入echo $http_proxy密碼,他們會看到我的密碼,但我認為沒有辦法解決這個問題。

有沒有其他方法可以解決這個問題?或者也許是一種加密字元串而不是編碼的方法?如果沒有辦法繞過它,我不介意在打開提示時輸入一些密碼。

使用base64是沒有用的,只是簡單的轉換。使用與加密數據一起儲存的密鑰進行加密也是無用的,因為它仍然只是一個簡單的轉換。如果您擔心有人訪問您的配置文件,那麼您需要使用不在配置文件中的密鑰進行加密,這意味著您必須在登錄時輸入密碼¹。

與其自己製作,不如使用現有的加密機制。

在 Linux 上,如果您使用文件加密,請使用eCryptfs加密您的主目錄,或者使用 Linux 的磁碟加密層(dm-crypt,命令)加密整個磁碟,或者使用encfscryptsetup創建一個小的按文件加密的文件系統。在後一種情況下,有一個安裝 encfs 文件系統的腳本,然後執行儲存在那裡的腳本。

在 Windows 上,將文件放在TrueCrypt / VeraCrypt上。

或者,使用密碼管理器(當然要設置主密碼)。secret-toolGnome 的密碼管理器 (gnome-keyring) 可以使用該實用程序從命令行查詢。Seahorse提供了一個方便的 GUI,用於探索和修改密鑰環以及設置主密碼。

secret-tool store --label='Corporate web proxy password' purpose http_proxy location work.example.com

export http_proxy="http://cman:$(secret-tool lookup purpose http_proxy location work.example.com)@192.0.2.3/"

這需要 D-Bus,它通常在 Linux 下預設可用(大多數現代桌面環境都需要它)但需要在 Cygwin 下手動啟動(我不知道具體如何)。

¹或以其他方式提供秘密材料,例如儲存在智能卡上。

引用自:https://unix.stackexchange.com/questions/266808