
我想在 xubuntu 中使用真正的 ssh-agent 而不是 gnome-keyring。我按照以下步驟操作http://dtek.net/blog/how-stop-gnome-keyring-clobbering-opensshs-ssh-agent-ubuntu-1204,但 gnome keyring 仍將自身註冊為 ssh-agent。我仍然想繼續使用 gnome-keyring 作為其他密碼
答案1
事實證明,如果xfce中開啟了gnome相容性,xfce4-session就會無條件啟動gnome-keyring-daemon。這是硬編碼的,目前無法配置它。停用 gnome 相容模式會導緻密鑰環在登入時無法啟動,如果啟動它,您將需要再次提供密碼。
最簡單的解決方案似乎是攔截對 gnome-keyring-daemon 的調用,並插入一個腳本,該腳本會將標誌插入--components
到參數中,以防止 gnome keyring 替換 ssh-add。
執行以下指令來移動 gnome-keyring-daemon:
sudo mv /usr/bin/gnome-keyring-daemon /usr/bin/gnome-keyring-daemon-wrapped
創建一個新的 gnome-keyring-daemon
sudo nano /usr/bin/gnome-keyring-daemon
並插入以下內容:
#!/bin/sh
exec /usr/bin/gnome-keyring-daemon-wrapped --components=pkcs11,secrets,gpg "$@"
使用 . 使新的 gnome-keyring-daemon 可執行sudo chmod +x /usr/bin/gnome-keyring-daemon
。
現在 gnome keyring 將不再嘗試取代 ssh-add。
請注意,升級系統將恢復預設的 gnome-keyring-daemon,因此升級後您可能需要再次執行上述步驟。
編輯:
在 xubuntu 14.10 中,啟動工作方式略有不同,因為 gkd 也是從會話 upstart 啟動的。可以覆蓋 upstart 配置,這樣它就不會啟動 ssh 元件,但即便如此,當 xfce4-session 也嘗試啟動它時,gkd 也會啟動它的 ssh 元件。因此,如果您想讓 xfce 也自動啟動 gnome 服務,您仍然需要上述 hack。另一種方法是停用 gnome 服務(設定 -> 會話和啟動 -> 進階 -> 在啟動時啟動 GNOME 服務),設定 upstart 以使用該--components=pkcs11,secrets,gpg
標誌啟動 gkd,也可以選擇設定您想要手動啟動的 gnome 服務。
(除了上面提到的兩個啟動 gkd 的地方之外,之前還從 lightdm/PAM 啟動了 gk-daemon,以接收用戶的登入密碼。但是該啟動並沒有完全配置 gkd,並且仍然期望完全配置通過第二次嘗試啟動它,以便該啟動嘗試與當前問題無關。
答案2
這是一個舊線程,但我在 Xubuntu 14.04 上解決這個問題的方法很簡單,只需gnome-keyring-daemon
在會話和啟動時重生即可。您需要做的只是執行以下命令:
$ gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
我們從 Gnome 密鑰環組件中刪除“ssh”。
- 前往選單 > 設定 > 會話和啟動
- 點擊應用程式自動啟動選項卡
- 點擊新增按鈕
- 將出現新的應用程式窗口,您可以像下面的範例一樣填寫它
- 姓名: SSH 金鑰環移除器
- 描述:從 GNOME 金鑰環中刪除 SSH
- 命令:
gnome-keyring-daemon --replace --daemonize --components=pkcs11,secrets,gpg
- 按一下“確定”
嘗試登出您的 XFCE 會話並重新登入。要確保 Gnome 密鑰環不再管理 ssh,只需運行即可。
$ ssh-add -l
Could not open a connection to your authentication agent.
如果您收到該訊息,則表示 Gnome 金鑰環未管理您的 SSH,並且您可以自由使用原始 OpenSSH ssh-agent 實作。
答案3
為了建立@JanKanis 的答案,我追蹤到 xfce4-session 是啟動 gnome-keyring-daemon --start 命令的罪魁禍首。
以這種方式運行時,gnome-keyring-daemon 不會檢查是否已設定 SSH_AUTH_SOCK,這是一個“功能”,因為這樣您就可以讓 ssh-agent 和 gnome-keyring-daemon 都提供套接字。
首先要做的事情是:
添加~/.config/upstart/gnome-keyring.conf
:
description "GNOME Keyring agents"
author "Dimitri John Ledkov <[email protected]>"
start on (starting xsession-init or starting ssh-agent or starting gpg-agent) and started dbus
task
script
# Stop because I say so
stop; exit 0
eval "$(gnome-keyring-daemon --start)" >/dev/null
initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK
initctl set-env --global GPG_AGENT_INFO=$GPG_AGENT_INFO
end script
現在用包裝器取代 gnome-keyring-daemon(我將原始的移至 /usr/libexec/):
#!/bin/sh
gkd=/usr/libexec/gnome-keyring-daemon
debug=1
log=${XDG_CACHE_HOME:-"${HOME}/.cache"}/gkd.log
if [ ${debug} -gt 0 ]
then
echo "================" >> ${log}
echo "Invoked as $0 $@" >> ${log}
echo "================" >> ${log}
/usr/bin/pstree -lag >> ${log}
fi
case "$@" in
*--start*)
$gkd --components=pkcs11,secrets,gpg "$@"
;;
*)
$gkd "$@"
;;
esac
if [ ${debug} -gt 0 ]
then
/usr/bin/pstree -lag >> ${log}
fi
調試程式碼可以讓您找出它停止工作的原因。由於這些程式都沒有健全的配置方法,因此無法繞過駭客命令。在這種情況下,我找不到任何記錄的 xfce4-session 不呼叫 gnome-keyring-daemon --start 的配置方法,該方法沒有其他副作用。他們都會對正在安裝的東西做出假設,從而繼續了解使用者的想法。
答案4
這是 JanKanis 發布的腳本的侵入性較小的版本。它接受傳遞給它的任何組件,但拉出 SSH 組件。
#!/bin/bash
ARGS="$@"
COMPONENTS=""
if [[ $ARGS =~ \-\-components= ]]; then
component_match_expression='(\-\-components=([0-9a-z,]+))'
COMPONENTS=$(echo $ARGS | grep -oP "$component_match_expression")
ARGS=$(echo $ARGS | sed -E "s/$component_match_expression//")
COMPONENTS="--components=$(echo $COMPONENTS | grep -oP '(?<=\-\-components=)([0-9a-z,]+)' | sed -e 's/ssh//' -e 's/,,/,/')"
if [ "$COMPONENTS" != "--components=" ]; then
ARGS="$ARGS $COMPONENTS"
else
exit 0
fi
fi
/usr/bin/gnome-keyring-daemon-wrapped $ARGS