![解決方案:使用 dpkg-divert 停用 gnome-keyring](https://rvso.com/image/1048326/%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%A1%88%EF%BC%9A%E4%BD%BF%E7%94%A8%20dpkg-divert%20%E5%81%9C%E7%94%A8%20gnome-keyring.png)
我不希望 gnome-keyring 妨礙我的 git 提交,部分原因是它在要求密碼時鎖定整個螢幕,即使在 KDE 上也是如此(儘管我現在已經切換到 GNOME)。雖然我確實很欣賞不必每次都輸入 SSH 密碼的便利性,但必須從一個視窗跳到另一個視窗就個人而言取消了這一點。這只是一個安慰的事:/
我嘗試過git config --global --unset credential.helper
,git config --system --unset credential.helper
但它們似乎沒有效果。由於我現在使用 GNOME,所以我不想刪除 gnome-keyring。我還有其他選擇嗎?我目前使用的是 Ubuntu 14.10,已經使用 Kubuntu 和 Ubuntu GNOME 完成了此操作。謝謝。
2014 年 11 月 17 日更新
這顯然會影響所有 SSH。我嘗試做
sudo rm /etc/xdg/autostart/gnome-keyring-ssh.desktop
但這沒有用。我可以
gnome-keyring-daemon --replace -c pkcs11,secrets,gpg
每次會議一次,但我想保持永久。還在尋找...
答案1
只需將相關.desktop
文件從/etc/xdg/autostart
to複製~/.config/autostart
並添加Hidden=true
到其中即可:
(cat /etc/xdg/autostart/gnome-keyring-ssh.desktop; echo Hidden=true) > ~/.config/autostart/gnome-keyring-ssh.desktop
然後重新載入 gnome shell(按Alt+ F2,然後鍵入r並按Enter)。
這是唯一的使用者友善的解決方案這對我有用(即不必軟鏈接。文件到/dev/空或chmod 0
)gnome-keyring-daemon
。事實上,軟連結到/dev/空在 GNOME 3.16 中不再為我工作。
信用去往努斯。
答案2
除了 Trusty 之外,我不能代表 Ubuntu 版本——而 GNOME 是一個不斷變化的目標,你可以保證每個版本都會有所不同——但這是我發現最可靠的工作方式:
mkdir -p ~/.config/autostart
cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/
echo "X-GNOME-Autostart-enabled=false" >> ~/.config/autostart/gnome-keyring-ssh.desktop
至少在 Unity 下啟動會話,很可能 GNOME3 也很奇怪:它將運行 Upstart 腳本,/usr/share/upstart/sessions/
然後運行 和 下的所有自動啟動桌面條目/etc/xdg/autostart
,gnome-keyring
並且許多其他東西都在兩者中(並且它可能運行一些東西)中/usr/share/upstart/xdg/autostart
,我也沒有測試過)。
新貴條目gnome-keyring-ssh
將檢查X-GNOME-Autostart-enabled=false
系統或使用者本機 .desktop 條目中的該行並退出,然後標準ssh-agent
會話將運行。然後,系統範圍內的系統gnome-keyring-ssh
將啟動,/etc/xdg/autostart
除非您在使用者本機自動啟動中有符合的項目,在這種情況下,系統將改為執行該條目。
過去,只需在本地自動啟動中包含該行就足夠了enable=false
,但最近的某個時候(例如,自2016 年5 月以來,Trusty 的LTS 期已過去兩年多)行為發生了變化,您需要類似於完整條目的內容。我仍在調查所需的精確密鑰集,以及負責的有問題的包更新。
為什麼 GNOME 人們不直接代理到 OpenSSH 密鑰代理是任何人的猜測。您可能想建議他們採取更明智的行為在這個 Bugzilla 條目中。
答案3
僅停用 gnome-kering 的 ssh-agent 組件的好、乾淨的方法:
gconftool-2 --set --type bool /apps/gnome-keyring/daemon-components/ssh false
答案4
解決方案:使用 dpkg-divert 停用 gnome-keyring
sudo dpkg-divert --local --rename /usr/bin/gnome-keyring-daemon
下次登入時,它就會消失。您只需要這一行,但請繼續閱讀以獲取解釋和警告。
簡短說明
此解決方案將程式重新命名為 gnome-keyring-daemon.distrib,因此無法找到它。
當您登入時,密碼請求將直接傳送到 ssh-agent,而不是 gnome-keyring 嘗試處理 ssh 整合。您可以使用常用指令解鎖 git 提交的 ssh 金鑰ssh-add
。
警告和悔恨
Gnome 鑰匙圈深深糾纏在一起與 Gnome 桌面。如果沒有它,某些東西可能會停止運行,直到安裝替代品為止。
重新啟用 Gnome 金鑰環
sudo dpkg-divert --remove --rename /usr/bin/gnome-keyring-daemon
您可能正在使用 Gnome 密鑰環但不知道
許多可以保存密碼的應用程式(例如 Chromium 和 Evolution)使用儲存在 Gnome Keyring 中的主金鑰對其進行加密。停用 Gnome 金鑰環可防止存取所有這些儲存的密碼。在停用 Gnome Keyring 之前備份已儲存的密碼是個好主意。
備份 Gnome 金鑰環
您可以透過複製 ~/.local/share/keyrings/ 中的檔案來備份金鑰。這些秘密是加密的,因此,根據您的安全立場,您可能想要將它們備份為純文字。為此,請使用「密碼和金鑰」程式(又稱「Seahorse」)為登入金鑰環臨時設定一個空密碼。 (提示:Seahorse 隱藏了右鍵單擊上下文選單中的更改密碼選項。)
警告:密碼可能以明文形式存儲
Chromium 和 Google Chrome 依賴名為「Secret Service」的守護程式來取得已儲存密碼的加密金鑰。如果缺少特勤局(一旦您停用 Gnome 密鑰環),他們會保存您的密碼未加密的。與 Firefox 不同,基於 chromium 的瀏覽器目前不提供手動設定主密碼的方法。
Freedesktop.org 的特勤局集成
Gnome Keyring 只是可以充當特勤局守護程序的程序之一。為了確保已儲存的密碼在 Chromium 和 Evolution 中加密,您可以安裝 keepassxc 並在設定中啟用 Secret Service。
進一步解釋
為什麼不直接使用chmod
or 呢mv
?
當系統更新時,透過 chmod 或 mv 所做的變更將會恢復。透過使用 dpkg,該解決方案將在任何情況下持續存在,甚至升級到新版本的 Ubuntu。
有沒有不太激烈的方法?
在撰寫本文時,似乎無法告訴 Gnome Keyring 繼續提供秘密服務整合並停止幹擾 ssh-agent。對於許多人來說這將是理想的,所以希望 Gnome 將來會添加這個選項。
為什麼其他方法不起作用
多年來,人們提出了許多不同的解決方案,但都在下一個版本中被打破。以下是為什麼不這樣做的簡短摘要。
配置 Gnome 金鑰環
理想的解決方案是配置 Gnome 密鑰環以執行正確的操作。實際上有一個--components
幾乎可以工作的命令列選項。它允許指定要初始化的元件:
gnome-keyring-daemon --components secrets,ssh,pkcs11
人們可以從列表中省略 ssh,理論上,它不會破壞 ssh 身份驗證。不幸的是,那不是我的經驗。也許問題是 gnome-keyring 從多個位置啟動(見下文),但缺點是:沒有辦法告訴 Gnome Keyring絕不載入ssh組件,只是說現在不要。
apt 刪除 gnome 金鑰環
刪除 gnome-keyring 軟體包的明顯解決方案還會卸載所有依賴它的軟體包,包括 gnome-core。儘管有多種解決方法,但很容易意外地最終卸載整個 GNOME 桌面環境。
多種攻擊媒介
使得 gnome-keyring-daemon 如此難以殺死的原因之一是它在登入時透過(至少)四種不同的方法啟動,每種方法都必須以特定的方式停用。
- /etc/pam.d/gdm-password 中的 PAM(可插入身份驗證模組)
- systemd 用戶服務和套接字
- /usr/share/dbus-1/services/ 中的 systemd 使用者 session.slice
- /etc/xdg/autostart/gnome-keyring-*.desktop 中的 XDG 自動啟動