Bash

ssh-agent 未設置(未設置 SSH_AUTH_SOCK、SSH_AGENT_PID 環境變數)

  • April 1, 2021

我在 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 中進行評估,例如 evalssh-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

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