SSH用の鍵は、Windows上でPuTTYgenを使ってよく生成しています。
が、先日のこと。ちゃんと正常に生成できたはずなのに、いざGithubに登録しようと思ったら、エラーで弾かれる…。なぜ…。
もしや、SSH用の鍵を生成する際、「SSH1/SSH2」だの「RSA/DAS」だのオプションがあるが、よく分からずデフォルトオプションで生成しちゃってたのが問題?
そういえば過去にもサーバによって使えたり使えなかったりする鍵があったので、これはいい加減に勉強せねば...ってことで、鍵の種類について調査してみました。
いざ調べてみたら、話はそもそもSSHのプロトコルの違いを知ることからだったのです。
商用SSH と OpenSSH
- SSH には 商用SSH と OpenSSH の二つの流れがある。
SSHの発明者(Tatu Ylonen)がある時期に会社(SSH Communications Security)(日本SSH社はここ)を起こして商用SSHを売り出してから、SSHは自由に使えなくなりました。そこで元々の公開されていたSSHをベースに本質は維持しつつ特許に抵触する部分を全部取り払って改良を加えたものがOpenSSHです。ユニックスのFreeBSD用に開発され、他のOSにも移植されています。
引用元サイト:http://osksn2.hep.sci.osaka-u.ac.jp/~naga/miscellaneous/winssh/winssha-2.html
SSHプロトコルバージョンによる違い
SSHプロトコルは、バージョン違いにより下記2種類が存在する。
- SSH1
- SSH2
SSH暗号化方式による違い
SSH暗号化方式にはRSA方式、DSA方式が存在する。
SSHプロトコルバージョンによりサポートしている暗号化方式は異なる。
SSHプロトコル | サポート暗号化方式 |
---|---|
SSH1 | RSA |
SSH2 | RSA, DSA |
※同じRSA方式でもSSH1とSSH2では互換性はない。
暗号鍵の記述形式の違い
- SSH1 では統一されている。
- SSH2 では統一されておらず、商用SSHと OpenSSH で違う。加えて、どちらにも互換性のあるPuTTy形式も存在する。
- OpenSSH形式
- OpenSSHのフォーマット。秘密鍵のヘッダーに以下の文字列。
-----BEGIN RSA PRIVATE KEY-----
- SECSH(ssh.com)形式
- 商用SSHのフォーマット。秘密鍵のヘッダーに以下の文字列。
---- BEGIN SSH2 ENCRYPTED PRIVATE KEY ----
- PuTTy形式
- PuTTyのフォーマット。秘密鍵の拡張子はppk(Putty private key)。秘密鍵のヘッダーに以下の文字列。
PuTTY-User-Key-File-2: ssh-rsa
PuTTYの使用する形式はPuTTY独自のものだが、OpenSSHや商用SSHと互換性があるように配慮されている。
サービスによって鍵の対応フォーマットが異なる場合がある
windowsのputtygenで作成した公開鍵をそのままgithubなどのopenssh対応ツールにそのまま使う事ができない。githubの場合はadd keyでエラーになり登録ができない。
そのため一度puttyで作成したキーをssh-keygenで作成したのと同じ状態のopenssh対応版に変更する必要がある。
Puttyで生成した鍵は、適宜別フォーマットのものに変換してあげる必要があるってことですね。納得。