SSH鍵接続の仕様変更に伴うOPENSSH形式フォーマットが失敗する件の対処
2022/08/24
2022/08/27
OpenSSH 7.8で仕様が変わったため,OPENSSLの昨今の進んでいるバージョンを使って作った鍵だとSSHアプリから接続しようとするとInvalid Formatと出てしまう。 もちろんSSHアプリの対応状況にもよる。最新形式に対応しているソフトだと問題ないが対応してないと「Invalid Format」がでてしまうのだ。
従来の形式と最新の形式でヘッダ情報が異る
従来の形式
1 2 3 |
-----BEGIN RSA PRIVATE KEY----- ほにゃらか...... -----END RSA PRIVATE KEY----- |
1 2 3 |
-----BEGIN OPENSSH PRIVATE KEY----- ほにゃらか...... -----END OPENSSH PRIVATE KEY----- |
ということでアプリ側で最新openssh仕様に届いていないケースもあるので変換して対応を行う必要があります。
変換対応
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
変換して元のファイルを上書きする方法です。 $ ssh-keygen -m PEM -f netbsd_user.key Generating public/private rsa key pair. netbsd_user.key already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in netbsd_user.key. Your public key has been saved in netbsd_user.key.pub. The key fingerprint is: SHA256:bvoOVg/GrvIvzvhnnrVMGnzhTBatgqzvRm1UeS7/Pr4 hideo@yell The key's randomart image is: +---[RSA 3072]----+ | . | | o.. | | ..o. | | . o. .o. | | ooS =o | | ..*oO .. | | ..o.* B . | | .=o=oO . o | | .BXOB o oEo | +----[SHA256]-----+ この実行後に変換されると共に秘密鍵から公開鍵が一緒に作成されます。 その鍵を接続先のサーバの.sshフォルダー配下にあるauthorized_keysへ追記してあげましょう。 それで再度sshクライアントから接続を行うと接続が成功します. |
SSHクライアント側の対応
以下はLinuxでのssh環境のケース。ここも実はLinuxのsshバージョンやらopensslで微妙にパラメータが違う。更にコマンドラインsshオプション指定が PubkeyAcceptedKeyTypesだと蹴られてしまうケースもあった。
合わせてHostKeyAlgorithms +ssh-rsaが必要な環境もありました。全くこれらオプションでは蹴られてしまう場合はPubkeyAcceptedKeyTypes===>PubkeyAcceptedAlgorithms=+ssh-rsaで変更し成功した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ cd $ cd .ssh $ vi config Host oserv Hostname old.netmarvs.com User stuff Port 22 IdentityFile ~/SSH/classic-srv.key PubkeyAcceptedKeyTypes +ssh-rsa # ここが決めてだな。 IdentitiesOnly yes configでは「PubkeyAcceptedKeyTypes +ssh-rsa」でうまく行くケースが多い。でもsshの方で直にオプション指定だと何故か失敗するんだよね。 その場合は「PubkeyAcceptedAlgorithms=+ssh-rsa」でオプション指定すると成功しました。 $ ssh ovps あるいは $ ssh stuff@old.netmarvs.com -i ~/SSH/oldmars.pem -o PubkeyAcceptedAlgorithms=+ssh-rsa これで駄目な場合は $ ssh stuff@old.netmarvs.com -i ~/SSH/oldmars.pem -o PubkeyAcceptedAlgorithms=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa これで大丈夫でした。 |