Solaris9 を入れたら,ssh がついていました.
SSH Version Sun_SSH_1.0, protocol versions 1.5/2.0.
みたいなやつでした.どうも,OpenSSHベースのようです.
学校で使っている ssh2 やら ssh1 やら OpenSSHやらわけわからなく
なったので,メモがてらにまとめてみました.
主に,鍵の互換性などについて書いてありますが,
それ以上にセキュリティにも注意してください.
SSHには,おおまかにわけて,
SSH Communications Security
の作っている SSH と,
OpenSSHというのがあります.
それぞれ,Protocol 1 と Protocol 2があります.
ここでは,便宜上,
SSH1, SSH2, OpenSSH1, OpenSSH2と表記することにします.
Sun_SSHの設定は,OpenSSHと同じようです.
あと,lshというのとか,
OSSHとかあるようですが,使っている人いるのかな….
SSH2やOpenSSH2では,設定によっては,SSH1,OpenSSH1でのクライアントからの
認証に答えることができます.
OpenSSHとSSHでは,鍵の形式が異なります. ただし,簡単な変換で,相互の認証が可能となります.
| SSH1 サーバ |
OpenSSH1 サーバ |
SSH2 サーバ |
OpenSSH2 サーバ | |
| SSH1 クライアント | ○ | ○ | △ | △ |
| OpenSSH1 クライアント | ○ | ○ | △ | △ |
| SSH2 クライアント | × | × | ○ | ○ |
| OpenSSH2 クライアント | × | × | ○ | ○ |
SSH2のサーバは,
/etc/ssh2/sshd2_config: Ssh1Compatibility yes
とすることで,Protocol 1のクライアントからの認証を受けつけることが できます. ただし,ssh1 をインストールしておく必要があります.
OpenSSH2のサーバでも,Protocol 1のクライアントからの
認証が可能です.SSH2との違いは,OpenSSHのサーバ自体が,
Protocol 1 も 2も話すことです.ssh1などを別途インストールする
必要はありません.
設定は以下のとおり.
/etc/ssh/sshd_config: Protocol 2,1 HostKey /etc/ssh/ssh_host_key
Protocol 1用の鍵は入らないので,新規に作ってやるか,
もしくは,ssh1 で使っていた鍵を流用することができます.
新規に作るには,
# /usr/bin/ssh-keygen -b 1024 -t rsa1 -f /etc/ssh/ssh_host_key -N ''
とするといいです.
| 公開鍵 | 秘密鍵 | |
| SSH1 | ~/.ssh/authorized_keys | ~/.ssh/identity |
| OpenSSH1 | ~/.ssh/authorized_keys | ~/.ssh/identity |
| SSH2 | ~/.ssh2/authorizationで指定 | ~/.ssh2/identificationで指定 |
| OpenSSH2 | ~/.ssh/authorized_keys | ~/.ssh/id_dsa ~/.ssh/id_rsa |
SSH1 と OpenSSH1 では,同じ公開鍵と秘密鍵を使うことができます.
設定なども同じです.
ここで,~/.ssh/authorized_keys は,SSH1とOpenSSH1だけでなく, OpenSSH2でも使うことがわかります. ~/.ssh/authorized_keysは,以下のように複数のProtocolの鍵を 入れることができます.
~/.ssh/authorized_keys: 1024 41 13403979999670711380 〜 4092737 okada@server ssh-dss AAAAB3NzaC1kc3MAAACB 〜 cbeiLps= ssh-rsa AAAAB3NzaC1kc3MAAACB 〜 cbeiLps=
~/.ssh/authorized_keys2 を使うものもありますが, 詳しくはマニュアルを読んで調べてください.
OpenSSHの ssh-keygen を使って,鍵の生成を行ないます.
% ssh-keygen -b 1024 -t rsa1
/home/kokada/.ssh/identity と /home/kokada/.ssh/identity.pub が できます.
% cat ~/.ssh/identity.pub >> ~/.ssh/authorized_keys % chmod 600 ~/.ssh/authorized_keys
してください.
SSH1の ssh-keygen を使って,鍵の生成を行ないます.
% ssh-keygen1
/home/kokada/.ssh/identity と /home/kokada/.ssh/identity.pub が できます.
% cat ~/.ssh/identity.pub >> ~/.ssh/authorized_keys % chmod 600 ~/.ssh/authorized_keys
してください.
OpenSSHの ssh-keygenを使って,鍵の生成を行ないます.
% ssh-keygen -b 1024 -t dsa % cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys % chmod 600 ~/.ssh/authorized_keys
もしくは,
% ssh-keygen -b 1024 -t rsa % cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys % chmod 600 ~/.ssh/authorized_keys
してください.
SSH2の ssh-keygen2を使って,鍵の生成を行ないます.
% ssh-keygen2 -b 1024 -t dsa
秘密鍵 /home/kokada/.ssh2/id_dsa_1024_a
公開鍵 /home/kokada/.ssh2/id_dsa_1024_a.pub
ができます.
SSH2では,各鍵の位置は,
~/.ssh2/authorization と ~/.ssh2/identification で
指定します.
~/.ssh2/identification: IdKey id_dsa_1024_a ~/.ssh2/authorization: Key id_dsa_1024_a.pub
複数指定したり,名前を変えたりもできます.
OpenSSH1 と SSH1 の鍵は,そのままで使い回すことができます.
しかし,
OpenSSH2 と SSH2 の鍵は,形式の変換が必要です.
わたしは,SSH2で作った鍵をOpenSSHのssh-keygenを使って,
OpenSSH2用の鍵に変換して,両者の鍵を共有しています.
OpenSSHの ssh-keygen を使って,鍵の変換を行ないます.
% ssh-keygen -e -f ~/.ssh/id_dsa.pub > ~/.ssh2/id_dsa_openssh.pub
~/.ssh2/authorization も変更しておきます.
秘密鍵の変換について間違っていましたので,修正しました(2005/06/03). ありがとうございます(To 小林さん).
Sun_SSHでは,このあたりのオプションが 微妙に違うようです. (ベースのOpenSSHが違う?)
/usr/bin/ssh-keygen -x -f ~/.ssh/id_dsa > ~/.ssh2/id_dsa
OpenSSHの ssh-keygen を使って,鍵の変換を行ないます.
% ssh-keygen -i -f ~/.ssh2/id_dsa_1024_a.pub >> ~/.ssh/authorized_keys % ssh-keygen -i -f ~/.ssh2/id_dsa_1024_a > ~/.ssh/id_dsa % chmod 600 ~/.ssh/id_dsa
RSAの場合は,
% ssh-keygen -i -f ~/.ssh2/id_rsa_1024_a.pub >> ~/.ssh/authorized_keys % ssh-keygen -i -f ~/.ssh2/id_rsa_1024_a > ~/.ssh/id_rsa % chmod 600 ~/.ssh/id_rsa
ただし,鍵が暗号化されていない場合 (passphrase が空の場合)しか変換することができないようです. だめな場合は,以下のようになります.
unsupported cipher 3des-cbc decode blob failed.
ここに,暗号化されている場合の方法がありました. 情報ありがとうございます(To 小林さん)
上にも書いたように,一般にはSSH2とOpenSSH2とで秘密鍵の変換はできません.
そこで,秘密鍵,公開鍵はそれぞれについて生成し,
公開鍵のみ両者で使う方法について検討します.
まず,鍵の組を SSH2,OpenSSH2 それぞれについて準備します. 生成の方法については,前項目を参照してください.
次に,OpenSSH2 で作成した公開鍵を SSH2のサーバでも使えるように します.鍵の変換には OpenSSH2 の ssh-keygen を使います. OpenSSH2で作成した
% ssh-keygen -e -f ~/.ssh/id_dsa.pub > ~/.ssh2/id_dsa_openssh.pub % echo "Key id_dsa_openssh.pub" >> ~/.ssh2/authorization
SSH2 で作成した公開鍵を OpenSSH2のサーバでも使えるようにもします.
% ssh-keygen -i -f ~/.ssh2/id_dsa_1024_a.pub >> ~/.ssh/authorized_keys