
我正在運行時eval `ssh-agent -s\`
收到此錯誤
fish: Unknown command: `ssh-agent
答案1
您的問題有兩個部分:
- 為什麼嘗試時會出現錯誤
eval `ssh-agent -s`
? - 如何
ssh-agent
在 Fish shell 中啟用
首先,您正在尋找的功能稱為「命令替換」。在 Bash/POSIX shell 中有兩種方法可以做到這一點:
- 反引號(例如
`command`
),如您所使用 $(command)
強烈建議不要使用反引號形式,因此,如果您遇到使用它們的文檔或博客,請意識到它已經嚴重過時(或不知道)。
正如您所發現的,在 Fish 中,(command)
分組是執行命令替換的「最受支援」的方式。然而,從 Fish 3.4.0 開始,該$(command)
表單也有效。所以使用:
eval (ssh-agent -c)
或者eval $(ssh-agent -c)
將工作
如何在fish shell中執行ssh-agent?
但是,我建議使用keychain
用於簡化ssh-agent
Fish(和其他 shell)中的使用。忽略網頁上的部分(正如 @Charliesneath 在評論中指出的那樣),“目前,鑰匙圈與 Fish shell 不相容。” 只是網頁已經有一段時間沒有更新了。
Keychain 實際上確實內建了對 Fish 的支援(於 2017 年新增),並且可以利用通用變數來使金鑰在多個 shell 會話之間保持同步。
例如,如果您開啟了兩個 Fish shell 會話,並且在其中一個會話中執行ssh-agent
/ ssh-add
,則仍需要在另一個會話中執行相同的命令,並再次輸入密碼。有在 shell 會話之間共用代理程式的方法,但 Keychain 會幫你處理。
鑰匙圈可以直接從大多數發行版的儲存庫安裝。例如,sudo apt install keychain
。
可以透過以下方式在 Fish 中啟用它:
keychain --eval <keyfile> | source
我在 Fish 中進行瞭如下設定。
在中建立以下腳本
~/.config/fish/conf.d/keychain.fish
if status is-login and status is-interactive # To add a key, set -Ua SSH_KEYS_TO_AUTOLOAD keypath # To remove a key, set -U --erase SSH_KEYS_TO_AUTOLOAD[index_of_key] keychain --eval $SSH_KEYS_TO_AUTOLOAD | source end
set -Ua SSH_KEYS_TO_AUTOLOAD ~/.ssh/id...
對於您想使用的任何鍵。
差不多就這樣了。當您啟動登入 Fish shell 時,如果密鑰未解鎖,Keychain 將要求輸入密碼並將其新增至共用ssh-agent
.如果已經解鎖,則不會再次詢問。
當然,您可以透過嵌入靜態鍵名來簡化腳本。我更喜歡通用變數來保持腳本動態。即使我在不同的系統上使用不同的金鑰,這也允許將單一腳本儲存在我的 dotfiles 儲存庫中。
答案2
答案3
我使用fish_ssh_agent
來自 gihub 的https://github.com/ivakyb/fish_ssh_agent
該儲存庫還沒有關於 SSH、SSH-agent、Fish-shell 主題的有價值的提示。