又是一個網路上搜尋到的資訊都不太對的問題。只有提 issue 的這邊寫得好些。
一開始是看著一堆沒加密的 ssh private keys 覺得不太舒服,想把他們通通加密起來。可
是重開機後第一次用要打密碼又很麻煩,就想搭配 gnome-keyring-daemon
使用,自動記
住密碼。本來以為是由於我的桌面環境不是標準的 Ubuntu 桌面才不會動,後來發現用標準
的登入也不行 (20.04 LTS)。
標準環境下
假設用標準環境,/usr/share/xsessions/ubuntu.desktop
長這樣:
1 | [Desktop Entry] |
看起來一部份是用 systemd 去跑 session. 看一下 /usr/lib/systemd/
的確是這樣。
首先 user-preset/90-systemd.preset
裡面有
1 | # Passive targets: always off by default, since they should only be pulled in |
圖形界面的東西預設是關的,在 user/gnome-session.target
裡面才又開起來:
1 | BindsTo=graphical-session.target |
接下來是 user/gnome-keyring-ssh.service
重點在
1 | [Unit] |
所以要在圖形界面下,檢查 SSH_AUTH_SOCK
沒設定且 autostart 有開才會跑。於是把系
統的 gnome-keyring-ssh.desktop
copy 到自家目錄 ~/.config/autostart
底下,並
且把裡面原本的 X-GNOME-Autostart-enabled=false
改為 true, 結果還是一樣不跑,可
見在此之前 ssh-agent
已經跑起來了。到 /etc/X11/Xsession.d
底下看到
90x11-common_ssh-agent
這個會先跑,導致後面進 gnome-session 時 SSH_AUTH_SOCK
已經設定了。這個要改 /etc/X11/Xsession.options
把裡面 use-ssh-agent
comment
掉,之後就運作正常。
awesome desktop manager 環境下
沒有 systemd, 自己執行就行了。但內建的 awesome.desktop
就只是直接執行 awesome
而已,沒辦法先跑 gnome-keyring-daemon
, 直接新增一個 desktop 檔自己來:
1 | $ cat /usr/share/xsessions/xsession.desktop |
注意 Xsession.options
裡面要有 allow-user-xsession
. 接下來 ~/.xsession
簡
單寫就好:
1 |
|
搭配使用效果
首先把沒加密的 private key 都用 ssh-keygen -p
加密起來,然後實際使用它來連線,
例如 ssh -i .ssh/id_ed25519
之類的,這時 ssh 就會按照 SSH_AUTH_SOCK
裡面的設
定去問 keyring-daemon, daemon 就會跳一個圖形界面出來問密碼:
把下面那個自動解鎖的選項打勾,密碼就會記到 keyring 裡面了。執行 seahorse
可以
看到目前列管的 ssh keypairs, 注意要在 ~/.ssh
目錄下 xxx
跟 xxx.pub
成對的
才會出現。