キーがすでに存在する場合は、ssh-addに静かにしてください。

キーがすでに存在する場合は、ssh-addに静かにしてください。

ssh-add /path/to/special_keyスクリプトの上部に入れたいです。これはうまくいきますが、いつもパスワードの入力を求められます。ssh-add -lキーが追加されたとマークされていますが、まだパスワードを要求しているので、奇妙で少し迷惑です。

「このキーを追加し、まだ追加されていない場合はパスワードを要求し、そうでない場合は何もしないでください」と言う方法はありますか?

答え1

必要なものを達成するのに役立つssh-addオプションはありませんが、特に1つのキーに興味があることを考慮すると、問題を解決するのは非常に簡単です。

まず、特殊キーの指紋を取得します。

ssh-keygen -lf /path/to/special_key  | awk '{print $2}'

この指紋が 6d:98:ed:8c:07:07:fe:57:bb:19:12:89:5a:c4:bf:25 と同じであるとします。

次に、スクリプトの上部にssh-add -lキーがすでにロードされていることを確認し、キーを追加するように求められます。

ssh-add -l |grep -q 6d:98:ed:8c:07:07:fe:57:bb:19:12:89:5a:c4:bf:25 || ssh-add /path/to/special_key

必要に応じて、これらすべての項目を1行に縮小できます。

ssh-add -l |grep -q `ssh-keygen -lf /path/to/special_key  | awk '{print $2}'` || ssh-add /path/to/special_key

答え2

explicitを使用する特別な理由があるかもしれませんが、ssh-add「キーを初めて使用するときにパスワードを求めるメッセージが表示され、その後は再び表示されないようにしたい」としたい場合は、opensshにはより簡単な解決策があります。

あなたのファイルにAddKeysToAgent yes.ssh/config

答え3

直接確認する方法はありませんが、一部のスクリプトを使用して確認ssh-addできます。ssh-keygen

$ if  ssh-add -l | \
    grep -q "$(ssh-keygen -lf /path/to/special_key | awk '{print $2}')"; \
    then echo yes; \
    else echo no; \
  fi

yesファイルが表す指紋がの出力/path/to/special_keyに表示されると、上記の内容が印刷されます。ssh-add -l

はい

$ if  ssh-add -l | \
    grep -q "$(ssh-keygen -lf /path/to/special_key | awk '{print $2}')"; \
    then echo yes; \
    else echo no; \
  fi
yes

出力はssh-keygen -lf /path/to/special_key次のとおりです。

$ ssh-keygen -lf /path/to/special_key
2048 8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c  dev-servers (RSA)

指紋を含む2番目の列のみを選択するには、「awk '{print $ 2}」を使用します。つまり:

8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c

引用する

答え4

ssh-add --apple-use-keychain FILEMacではうまくいきます。
それでも「IDが追加されました:」行が表示されますが、パスワードは要求されません。

マニュアルページから:

--apple-use-keychain IDを追加すると、各パスワードもユーザーのキーチェーンに保存されます。 ID 削除を使用すると、-dすべてのパスワードが削除されます。

関連情報