web-dev-qa-db-ja.com

ssh-addを使用してssh-agentに追加されたキーを一覧表示する方法は?

ssh-addssh-agentに追加されたキーを確認する方法と場所を教えてください。

230
Patryk

-lオプションをssh-addに使用して、指紋でリストします。

$ ssh-add -l
2048 72:...:eb /home/gert/.ssh/mykey (RSA)

または、-Lを使用して、OpenSSH形式の完全なキーを取得します。

$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc[...]B63SQ== /home/gert/.ssh/id_rsa

後者の形式は、~/.ssh/authorized_keysファイルに配置する場合と同じです。

278
gertvdijk

驚いたことに、MacOSバージョンのssh-addは、Linuxバリアントと同様に、ある時点でファイル名を表示しなくなりました。このスクリプトは、対応するファイルが~/.ssh/にある指紋についても同じように作成しました。

ファイルで関数ssh-add_wf、wf =を呼び出します。関数の詳細は以下のとおりです。

$ type ssh-add_wf
ssh-add_wf is a function
ssh-add_wf ()
{
    while read -r line; do
        for file in ~/.ssh/*.pub;
        do
            printf "%s %s\n" "$(ssh-keygen -lf "$file" | awk '{$1=""}1')" "$file";
        done | column -t | grep --color=auto "$line" || echo "$line";
    done < <(ssh-add -l | awk '{print $2}')
}

$  ssh-add_wf
 SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  [email protected]  (RSA)  /Users/myuser/.ssh/[email protected]_id_rsa.pub
 SHA256:qInIrnKcXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  [email protected]  (RSA)  /Users/myuser/.ssh/[email protected]_id_rsa.pub
 SHA256:tX+AAJA0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 SHA256:EyNkhTLQXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  [email protected]  (RSA)  /Users/myuser/.ssh/[email protected]_id_rsa.pub
 SHA256:KKKVwtvFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 SHA256:tr0hZP52XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

上記の場合、ssh-addディレクトリ内のファイルと一致する~/.ssh/の出力内のキーには、4列目の出力にファイル名が含まれます。ないキーは、その列が空になります。この出力では、一致するファイルを持つ3つのキーがあります。

機能の力学

スクリプトは2つのループを使用します。外側のループはwhileで、ssh-addの出力を受け取ります。この出力は、ssh-agentにロードされたSSHキーのすべてのフィンガープリントです。

内部ループはforループで、このパターン~/.ssh/*.pubに一致するすべてのファイルのコンテンツを通過します。ファイルごとにssh-keygen -lf <file>で問い合わせてから、この出力の最初の列を削除します。

...前...

4096 SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [email protected]

...後...

SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [email protected]

次に、この文字列がファイルの名前とともに出力されます。

printf "%s%s\n" "$(ssh-keygen -lf" $ file "| awk '{$ 1 =" "} 1')" "$ file"

このループの実行が終了すると、次のようになります。

|列-t | grep "$ line" || 「$ line」をエコー

これにより、列がフォーマットされるように出力がフォーマットされます(column -t)。

この時点で、ssh-addを介したgrep "$line"からのフィンガープリントの出力を確認します。一致が見つかった場合は、printf出力を出力します。それ以外の場合は、ssh-add$lineからの元の指紋の出力にフォールバックします。

参考文献

0
slm