ssh-agent 未設置(未設置 SSH_AUTH_SOCK、SSH_AGENT_PID 環境變數)
我在 Kubuntu 12.04 上為朋友設置了一個新使用者帳戶。當他使用時,
ssh
他得到這個錯誤:無法打開與您的身份驗證代理的連接
我們
ssh
在一些 bash 腳本中執行。在查看了可能導致該錯誤的各種各樣的事情之後,我遇到了這個解決方案:
$ eval `ssh-agent -s` $ ssh-add ~/.ssh/some_id_rsa
然後他可以
ssh
按預期執行命令(和 bash 腳本)。在執行這兩個命令之前,未在終端中設置環境變數:
$ echo $SSH_AGENT_PID $ echo $SSH_AUTH_SOCK $
執行命令後,環境變數按預期設置。但是,它們不會保持設置(例如,在不同的 shell 中或重新啟動後)。
我想知道如何設置他的電腦,這樣他就不必執行這兩個命令來設置環境變數。我不需要在我的電腦上執行它們(永遠)。到目前為止,我還沒有看到我們的機器之間有什麼不同。
我在手冊頁中看到了這個資訊,但它沒有告訴我 Ubuntu 通常是如何自動設置代理的,或者我朋友的機器上發生了什麼,所以這對他不起作用。
有兩種主要的方式來設置代理:第一種是代理啟動一個新的子命令,其中一些環境變數被導出,例如 ssh-agent xterm &。第二個是代理列印所需的 shell 命令(可以生成 sh(1) 或 csh(1) 語法),這些命令可以在呼叫 shell 中進行評估,例如 eval
ssh-agent -s
用於 Bourne 類型的 shell,例如 sh(1) 或ksh(1) 和 evalssh-agent -c
用於 csh(1) 和衍生物。安裝
acct
並重啟後,輸出如下lastcomm
:ssh-agent F newuser __ 0.12 secs Wed Aug 7 11:02 ssh-agent F newuser __ 0.00 secs Wed Aug 7 20:34 ssh-agent F newuser __ 0.02 secs Wed Aug 7 20:02 ssh-agent F newuser __ 0.01 secs Thu Aug 8 12:39 ssh-agent F newuser __ 0.02 secs Thu Aug 8 07:45
從手冊頁:
F – 在 fork 之後執行的命令,但沒有後續 exec
我不確定這是否重要。
為了
$ eval `ssh-agent -s`
當放入“啟動腳本”時,您的會話以及最終您期望環境的終端必須是該腳本的後代(由
fork
和)建構才能工作。exec
原因是 的輸出在評估時會在 shell 呼叫中ssh-agent -s
設置環境變數。在那裡形成,它們可能會流傳下來,也可能在途中失去。eval
因此,如果
ssh-agent
在登錄期間由腳本 A 在某處執行,但您啟動 shell 腳本的終端 B不是 A 的後代,那麼您將看不到 B 中的環境。如果您碰巧是
ssh-agent
作為systemd --user
服務啟動的,那麼您可能不得不改用約定:不要ssh-agent
指定變數,而是在啟動代理和啟動會話時使用常識。例如,我的~/.config/systemd/user/ssh-agent.service
樣子是這樣的:[Unit] Description=SSH agent [Service] Type=simple Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK [Install] WantedBy=default.target
在我的
~/.profile
我有這條線export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"
請注意,
%t
前者對應${XDG_RUNTIME_DIR}
於後者。**注意:**我對此不滿意!
我在這裡找到了答案:
http://www.bernatchez.net/userauth.html
在 ubuntu 上,ssh-add 實用程序無法載入證書文件。當代理是由 gnome-keyring 實現的代理時,就會發生這種情況。解決方法是停止使用 gnome-keyring 的 ssh 組件。由於初始化過程實際上啟動了一個真正的 ssh-agent,然後啟動了 gnome-keyring-ssh.desktop,它破壞了 AUTH_SOCKET 來接管它,我們可以通過禁用 gnome-keyring-ssh.desktop 恢復到原始的 ssh-agent。
禁用 gnome-keyring-ssh.desktop:
cd /etc/xdg/autostart/ sudo emacs gnome-keyring-ssh.desktop
將以下行添加到桌面文件並保存,然後重新啟動:
X-GNOME-Autostart-enabled=false