
実行中eval `ssh-agent -s\`
にこのエラーが発生しました
fish: Unknown command: `ssh-agent
答え1
質問には 2 つの部分があります。
- 試行時にエラーが発生するのはなぜですか
eval `ssh-agent -s`
? ssh-agent
Fishシェルで有効にする方法
まず、探している機能は「コマンド置換」と呼ばれます。Bash/POSIX シェルでこれを実行するには 2 つの方法があります。
- バッククォート(例
`command`
) $(command)
バックティック形式は強く推奨されていないため、バックティックを使用しているドキュメントやブログに遭遇した場合は、それが非常に古くなっている(または認識されていない)ことを認識してください。
Fish では、ご存知のとおり、(command)
グループ化はコマンド置換を行うための「最もサポートされている」方法です。ただし、Fish 3.4.0 以降では、形式$(command)
も機能します。したがって、次のいずれかを使用します。
eval (ssh-agent -c)
またはeval $(ssh-agent -c)
働くでしょう
fish shell で ssh-agent を実行するにはどうすればいいですか?
しかし、私はkeychain
Fish(および他のシェル)での使用を簡素化します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
答え3
私はfish_ssh_agent
gihubから使用していますhttps://github.com/ivakyb/fish_ssh_agent
このリポジトリには、SSH、SSH エージェント、Fish-shell に関する貴重なヒントもいくつかあります。