ある公開鍵が指定した秘密鍵とペアなのか調べる方法
Shellで, 秘密鍵と公開鍵のパスが入った変数をそれぞれ設定しておきます.
$ PRIVKEY=<path>
$ TESTKEY=<path>
その後, 次のコマンドを打ちます.
$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )
コマンド実行後にFiles /dev/fd/11 and /dev/fd/12 are identical
と表示されていればその鍵同士はペアです.
$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )
Files /dev/fd/11 and /dev/fd/12 are identical
$ # `Files /dev/fd/11 and /dev/fd/12 are identical`と表示された.
間違っている鍵同士なら, Files /dev/fd/11 and /dev/fd/12 differ
と表示されます.
$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )
Files /dev/fd/11 and /dev/fd/12 differ
$ # `Files /dev/fd/11 and /dev/fd/12 differ`と表示された.
実験1 正しいペアの場合
秘密鍵と公開鍵のペアを作成しておきます. 今回はtestなのでbitは2048で.
$ ssh-keygen -t rsa -b 2048 rsa -N "" -f ~/.ssh/test_rsa
その後, 秘密鍵と公開鍵のパスを指定します.
$ PRIVKEY=~/.ssh/test_rsa
$ TESTKEY=~/.ssh/test_rsa.pub
diffを取ります.
$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )
Files /dev/fd/11 and /dev/fd/12 are identical
実行結果にFiles /dev/fd/11 and /dev/fd/12 are identical
と表示されたため, ~/.ssh/test_rsa
と~/.ssh/test_rsa.pub
はペアです.
実験2 違うペアの場合
また新しいペアを作成します.
$ ssh-keygen -t rsa -N "" -b 2048 -f ~/.ssh/test_rsa
その後, それぞれ異なる秘密鍵と公開鍵のパスを指定します.
$ PRIVKEY=~/.ssh/test_rsa
$ TESTKEY=~/.ssh/test_diff_rsa.pub
diffを取ります.
$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )
Files /dev/fd/11 and /dev/fd/12 differ
Files /dev/fd/11 and /dev/fd/12 differ
が表示されたので, ~/.ssh/test_rsa
と~/.ssh/test_diff_rsa.pub
はペアではありません.
コマンドの意味
$ diff -sq <( ssh-keygen -yef "$PRIVKEY" ) <( ssh-keygen -yef "$TESTKEY" )
について, 説明していきます.
まずはssh-keygen -yef "$PRIVKEY"
の部分を説明します. オプションは次のようになっています.
引用元 : OpenSSH-7.3p1 日本語マニュアルページ (2016/10/15) #SSH-KEYGEN (1)
- -y: このオプションは OpenSSH 形式の秘密鍵ファイルを読み、OpenSSH 形式の公開鍵を標準出力に表示します。
- -e: このオプションは OpenSSH 形式の秘密鍵あるいは公開鍵ファイルを読み、"-m" オプションで指定された形式で標準出力に表示します。デフォルトの形式は"RFC4716"です。このオプションを使うと、OpenSSH の鍵をいくつかの商用 SSH 実装で使われている形式の鍵に変換できます。
- -f <ファイル名>: 鍵を格納するファイル名を指定します。
つまり, 指定したファイルを"RFC4716"という書式に従って標準出力しています. 指定したファイルが秘密鍵の場合は, 公開鍵を出力します.
次に, diff -sq <( ... ) <( ... )
について説明します.
オプションは次のとおりになっています.
引用元 : DIFF
- -s, --report-identical-files
2 つのファイルが同じだったときも報告する。- -q, --brief
ファイルが違うかどうかだけを報告する。 違いの詳細は報告しない。
この2つのオプションを付けることで, ファイルの違いのみを報告するようにしています.
diff <( ... ) <( ... )
については名前付きパイプというものを使用していて, <( ... )
の部分では入力をファイル扱いしてくれるらしいです.
まとめ
ということで, 鍵同士のペアを確認する方法を書きました. 参考になれば幸いです.
0 コメント:
コメントを投稿