大変ご無沙汰しております。

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 追記:
一部記載内容の修正を行い、再公開しました。
このエントリーをはてなブックマークに追加 mixiチェック

はじめまして!

いきなりのご挨拶から失礼致します。
私、フォースクーナ株式会社の新米エンジニア(年齢は新米とは言いがたいですが...)のK(髭)と申します。

本日より、弊社の敏腕でちょっと右斜め上な発想を持ったクラウドSE達から、世界に向けて色々な事を発信して行くことになりました。

まずは新米の私よりご挨拶となりますが、今後は技術的な大ネタ・小ネタ、ちょっとしたTipsから、果てはIT業界に革新を起こす(かもしれない?)技術情報や時事情報等を発信していく予定でございます。

皆様の朝の通勤のお供に、またはお昼休みの息抜きに、そして、何かに困った方へのお役に立てるようなブログにしていければと思います。

簡単なご挨拶となりますが、ご愛顧の程、よろしくお願い致します。

という事で、次回担当、弊社クラウドSEの人気者である師匠へバトンをタッチします。

> 師匠
よろしくお願いします!

このエントリーをはてなブックマークに追加 mixiチェック

↑このページのトップヘ