如何在 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 会为您处理。

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来自 gihubhttps://github.com/ivakyb/fish_ssh_agent

github/ivakyb/fish_ssh_agent

该 repo 还在 SSH、SSH-agent、Fish-shell 主题上提供了一些有价值的提示。

相关内容