fish shell で ssh-agent を実行するにはどうすればいいですか?

fish shell で ssh-agent を実行するにはどうすればいいですか?

実行中eval `ssh-agent -s\` にこのエラーが発生しました

fish: Unknown command: `ssh-agent

答え1

質問には 2 つの部分があります。

  • 試行時にエラーが発生するのはなぜですかeval `ssh-agent -s`?
  • ssh-agentFishシェルで有効にする方法

まず、探している機能は「コマンド置換」と呼ばれます。Bash/POSIX シェルでこれを実行するには 2 つの方法があります。

  • バッククォート(例`command`
  • $(command)

バックティック形式は強く推奨されていないため、バックティックを使用しているドキュメントやブログに遭遇した場合は、それが非常に古くなっている(または認識されていない)ことを認識してください。

Fish では、ご存知のとおり、(command)グループ化はコマンド置換を行うための「最もサポートされている」方法です。ただし、Fish 3.4.0 以降では、形式$(command)も機能します。したがって、次のいずれかを使用します。

  • eval (ssh-agent -c)または
  • eval $(ssh-agent -c)働くでしょう
fish shell で ssh-agent を実行するにはどうすればいいですか?

しかし、私はkeychainFish(および他のシェル)での使用を簡素化しますssh-agent。Webページの次の部分は無視してください(@Charliesneathがコメントで指摘しているように)。「現在、キーチェーンは Fish シェルと互換性がありません。」 ウェブページはしばらく更新されていません。

Keychain には実際には Fish (2017 年に追加) のサポートが組み込まれており、ユニバーサル変数を使用して複数のシェル セッション間でキーを同期させることができます。

たとえば、2つのFish Shellセッションを開いていて、そのうちの1つでssh-agent/を実行した場合ssh-add、もう1つでも同じ操作を実行し、パスワードを再度入力する必要があります。シェルセッション間でエージェントを共有する方法ですが、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 シェルを起動すると、キーがロック解除されていない場合、キーチェーンはパスワードを要求し、共有に追加しますssh-agent。すでにロック解除されている場合は、再度要求されることはありません。

もちろん、静的キー名を埋め込むことでスクリプトを簡素化できます。スクリプトを動的に保つには、ユニバーサル変数を使用することをお勧めします。これにより、異なるシステムで異なるキーを使用していても、単一のスクリプトをドットファイル リポジトリに保存できます。

答え2

この解決策がわかりました

走る

eval (ssh-agent -c)

参照:https://wiki.archlinux.org/title/Fish#ssh-agent を評価する

答え3

私はfish_ssh_agentgihubから使用していますhttps://github.com/ivakyb/fish_ssh_agent

github/ivakyb/fish_ssh_agent

このリポジトリには、SSH、SSH エージェント、Fish-shell に関する貴重なヒントもいくつかあります。

関連情報