キーがすでに存在する場合は、ssh-addを静かにします


16

ssh-add /path/to/special_keyスクリプトの先頭に置きたいです。これは正常に機能しますが、常にパスフレーズの入力を求められます。これは奇妙でありssh-add -l、キーが既に追加されていることを示す場合でもパスフレーズを要求するため、少し面倒です。

それを伝える方法はありますか:「このキーを追加し、パスフレーズがまだ追加されていない場合は尋ね、そうでなければ何もしません」?


回答:


20

希望する結果を達成するのに役立つssh-addのオプションはありませんが、特に1つのキーに関心がある場合は、この問題を回避するのは非常に簡単です。

まず、special_keyのフィンガープリントを取得します。

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

ワンライナーはうまく機能しています、ありがとう!
ダレンクック14

1
それは回避するので、私はもう少し分かり、かつ好ましいことが、この簡素化ワンライナーを見つけるssh-keygen代わりに、キーのパスを使用して、(すべての後、私は任意のキーを生成する必要はありません):ssh-add -l | grep -q 'path/to/key' || ssh-add /path/to/key
ohruunuruus

1
ssh-keygen答えではキーを生成しません- ssh-add -lあなたの例と同じは実際には何も追加しません。フラグはコマンドの動作を変更するため、名前と完全には一致しません。これらのバージョンは機能的に異なることに注意してください-パスとそのパスのキーによるチェックが変更された場合、バージョンはそれを取得しません。回答のバージョンは、どこからロードされたかに関係なく、既存のキーも検出します。
Richlv

5

を使用して直接チェックする方法はありませんが、チェックするスクリプトを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_keyssh-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)

そして、 `awk '{print $ 2}'を使用して、指紋を含む2番目の列のみを選択します。

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

参照資料


3

ssh-add明示的に使用する特定の理由があるかもしれませんが、「キーを初めて使用するときにパスフレーズの入力を求められますが、その後はそうではない」という場合は、opensshの方が簡単です。

ファイルを入れAddKeysToAgent yesてください.ssh/config


ありがとう。これはssh 7.2で追加されたようです(Ubuntu 18はバージョン7.6にあるようです)。
ダレン・クック

うん、「AddKeysToAgentは私のopensshバージョンではサポートされていません」がssh-addを明示的に使用する正当な理由です;-)
ネイト

0

ssh-add -K FILEMacでうまく動作しました。
「Identity added:」行は引き続き表示されますが、パスフレーズは要求されません。

manページから:

-Kアイデンティティを追加すると、各パスフレーズもユーザーのキーチェーンに保存されます。-dを使用してIDを削除すると、各パスフレーズが削除されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.