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 FILE
Macではうまくいきます。
それでも「IDが追加されました:」行が表示されますが、パスワードは要求されません。
マニュアルページから:
--apple-use-keychain
IDを追加すると、各パスワードもユーザーのキーチェーンに保存されます。 ID 削除を使用すると、-d
すべてのパスワードが削除されます。