回答:
希望する結果を達成するのに役立つ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
ssh-keygen
代わりに、キーのパスを使用して、(すべての後、私は任意のキーを生成する必要はありません):ssh-add -l | grep -q 'path/to/key' || ssh-add /path/to/key
ssh-keygen
答えではキーを生成しません- ssh-add -l
あなたの例と同じは実際には何も追加しません。フラグはコマンドの動作を変更するため、名前と完全には一致しません。これらのバージョンは機能的に異なることに注意してください-パスとそのパスのキーによるチェックが変更された場合、バージョンはそれを取得しません。回答のバージョンは、どこからロードされたかに関係なく、既存のキーも検出します。
を使用して直接チェックする方法はありませんが、チェックするスクリプトを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)
そして、 `awk '{print $ 2}'を使用して、指紋を含む2番目の列のみを選択します。
8a:6a:5a:44:20:c8:3a:da:ab:dd:1c:12:2c:e4:20:0c