如何在fish shell中執行ssh-agent?

如何在fish shell中執行ssh-agent?

我正在運行時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-agentFish(和其他 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

我得到這個解決方案

跑步

eval (ssh-agent -c)

參考:https://wiki.archlinux.org/title/Fish#Evaluate_ssh-agent

答案3

我使用fish_ssh_agent來自 gihub 的https://github.com/ivakyb/fish_ssh_agent

github/ivakyb/fish_ssh_agent

該儲存庫還沒有關於 SSH、SSH-agent、Fish-shell 主題的有價值的提示。

相關內容