私はお仕事では AWS を使っています。
EC2 で立てた仮想マシンを操作する際には、SSH 鍵が必要です*1。
今回は、その鍵の検証でハマったという話。
まず、こんな風にキーペアを作成します*2。
できました。
フィンガープリントは b0:58:25:23:fe:47:ed:b4:b3:1a:67:08:31:07:aa:f5:19:12:00:49 となっています。
キーペアを作成すると、公開鍵は AWS に保存され、秘密鍵はローカルにダウンロードされます。
さて、ローカルにある秘密鍵が、本当にこの画面に表示されているものと同じかどうかを確認したくなったら、どうすればいいでしょうか。
そのための手順は AWS から公開されています。
docs.aws.amazon.com
具体的に言うと、こんなコマンドを使います。
openssl pkcs8 -in path_to_private_key -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
やってみましょう。
ん? なんか違うんじゃが?
50:ad:bc:cb:c7:34:d9:b9:e1:e3:2c:ac:41:8f:42:f1:f2:9b:39:65 と表示されています。
どういうことでしょうか。
PowerShell 5.1 で実行してみましょう。
やや、また違う値が表示されました!
今度は 81:67:4a:01:07:0e:07:a0:66:a0:f8:16:59:2c:e4:d9:93:a7:79:1b となっています。
ならばコマンド プロンプトなら?
おお、今度は一致しました!
ちゃんと b0:58:25:23:fe:47:ed:b4:b3:1a:67:08:31:07:aa:f5:19:12:00:49 と出ていますね。
念のため WSL でもやってみましょう。
はい、正しい値が表示されていますね。
ちなみに、Windows 環境での OpenSSL は、Git for Windows に付属しているものを使用しています。
WSL で実行しているものとは異なるバイナリですが、コマンド プロンプトから実行すると結果が一致しますので、OpenSSL 側の問題ではないと思います。
PowerShell でやると結果が異なってしまう理由はわかりませんが、おそらくはコマンド中に含まれるパイプ(|
)の挙動に原因があるのではないかと思います。要注意ですね。
まとめ
ネイティブ コマンド*3をパイプ(|
)でつないだものを実行するときは、PowerShell ではなくコマンド プロンプトを使いましょう。