大変ご無沙汰しております。
K(髭)でございます。
しばらく間が空いてしまいましたが、皆様如何お過ごしでしょうか?
ここ最近、弊社クラウドSEはWindows Azureに注目しております。
Windowsを開発したあのMicrosoftが展開するクラウドサービス、どのような機能が備わっているのか、また、他のクラウドサービスプロバイダーと比較してどのような特徴があるのかを検証真っ最中でございます。
私、K(髭)も「いっちょ何かやってみるか!」と思い立ち、"あえて"Linux仮想マシンを起動させました。
Windows AzureではLinux仮想マシンへのログイン形式が公開鍵認証、パスワード形式、またはその両方と言う形で選択できるようになっています。
この公開鍵認証がssh-keygenコマンドで生成する鍵を使用する方式ではなく、opensslコマンドにてX509証明書を生成して、その『X509 証明書にカプセル化された SSH 公開キーだけを受け付けます』という仕様でした。
その為、Windows Azureのサイトに記載されている手順を元に、Windows(Windows 7 64bit)上でX509証明書と秘密鍵を作成し、仮想マシンの作成手順に添ってX509証明書のアップロードを行いました。
※参照した手順は以下になります。
http://www.windowsazure.com/ja-jp/manage/linux/how-to-guides/ssh-into-linux/
※opensslコマンドでのX509証明書生成方法
[root@host ~]# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout myPrivateKey.key -out myCert.pem Generating a 2048 bit RSA private key .................................................................................................................................+++ ................+++ writing new private key to 'myPrivateKey.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:TOKYO Locality Name (eg, city) [Default City]:SHINJUKU Organization Name (eg, company) [Default Company Ltd]:DATA HOTEL Organizational Unit Name (eg, section) []:N.A. Common Name (eg, your name or your server's hostname) []:K(mustache) Email Address []:
さて、起動した仮想マシンにログインする為にターミナル(TeraTerm 4.79を使用しております)を立ち上げて、上記で作成した秘密鍵を使用してログインしようとした所、
「SSH2秘密鍵の読み込みに失敗しました Unknown key file type」
と言うエラーメッセージが出てしまい、秘密鍵が読み込めないと言うトラブルが発生しました。
この時点では「手順に書いてあるPuTTYgenで鍵フォーマットの変換が必要なのか」と考えており、早速手順を元にPuTTYgenを使用してのフォーマット変換を実施しました。
しかし、またここでトラブルが発生。
PuTTYgenで秘密鍵を読み込もうとした所、
「Couldn't load private key (unrecognised key type)」
と言うエラーメッセージが表示され、こちらでも読み込みが出来ない状態でした。
さてどうしたものかと、まずはgoogleにて情報収集を行いました。
なかなか同様の事例が無く途方に暮れていた所、以下のURLにて有益な情報を発見しました。
http://www.windowsazure.com/en-us/manage/linux/how-to-guides/ssh-into-linux/#comment-850999619
※ブラウザの言語設定によっては上記ページは参照できないようです
ご確認の際は言語設定で「英語」を一番上に設定してご確認ください
そこにはこのように記載されていました。
『SOLVED!!!! use OpenSSL for windows, not the cygwin version http://gnuwin32.sourceforge.net/packages/openssl.htm』
提示されていたURLへアクセスしてみた所、切り分けに有用な以下の情報が記載されていました。
Version
0.9.8h
私がX509形式の鍵ペアを作成したOpenSSLのモジュールのバージョンを確認した所、以下が表示されました。
C:\Users\k(髭)>openssl.exe OpenSSL> version OpenSSL 1.0.1e 11 Feb 2013 OpenSSL>
この結果を元に、OpenSSL for windowsのモジュールをダウンロードして鍵ペアを生成し、PuTTYgenでフォーマット変換を実施した所、問題無くファイルの読み込みが出来ました。
ならばと、OpenSSL for windowsのモジュールで作成した公開鍵を使ってLinux仮想マシンを作成し、再度ターミナル(TeraTerm 4.79)にて秘密鍵を使用してログインを試みると...
出来た!
どうやら0.9.x系と1.0.x系で鍵の形式が何かしら変更されたのではないかと推測しております。
もし、同様の事象でお困りの方は以下をお試しください。
・OpenSSLは0.9.8系を使用する
Windows Azureのサイトに記載されているWindows用の手順の中でcygwinを使用する方法も記載されていますが、cygwinは現段階で1.0.1eが導入されているので、それ以外(git関連)の手順をお勧めします。
また、ワークアラウンドとしては以下の方法等があります。
・パスワード認証で仮想マシンを起動させて、ログイン後にssh-keygenコマンドで鍵を生成し、鍵認証に変更する(上記に記載した方法です)
・iptablesで接続元を制限した形でパスワード認証を使用する
等々
※ssh-keygenコマンドでの鍵生成方法
[fsop@host ~]# ssh-keygen -t rsa -C "for Azure" Generating public/private rsa key pair. Enter file in which to save the key (~/.ssh/id_rsa): Created directory '~/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ~/.ssh/id_rsa. Your public key has been saved in ~/.ssh/id_rsa.pub. The key fingerprint is: 56:a1:2e:b5:9a:7d:ce:1f:d6:be:f2:1b:20:04:33:a9 for Azure The key's randomart image is: +--[ RSA 2048]----+ | +.. | | .= . | | .o o | | Eo + | | . S . . | | * . o | | o . . o o | | + ..o . | | o..o=o | +-----------------+
この記事が少しでも皆様のお役に立てれば幸いです。
追記:
0.9.x系と1.0.x系で何か変更されたのでは?と思いgoogleで検索してみた所、このような資料が見つかりました。
http://www.jnsa.org/seminar/pki-day/2010/data/4_urushima.pdf
こちらのPDFのP29~30に「公開鍵暗号の秘密鍵フォーマットの一般化・共通化」と言う記載がありました。
今後は1.0.x系が主流となっていくのでしょうね。それに合わせてターミナルソフト等がアップデートされることを期待しましょう。
12/31 追記:
一部記載内容の修正を行い、再公開しました。