OpenSSH と SSH の相互運用

沢田篤史,赤坂浩一 (大型計算機センター)

1. はじめに

前号では,暗号技術を用いた安全な通信方式として SSH について解説しました.さて,この SSH のバージョン2 (SSH2) はライセンスに制限があり,副業やアルバイトの場で必ずしも自由に利用できないという問題があります.

一方,SSH プロトコルを実現するソフトウェアとしては,SSH の他にも OpenSSH (http://www.openssh.com/) があり,こちらは目的の制限なく利用することができます.最近では,この OpenSSH のパッケージが FreeBSD や Linux のディストリビューションにデフォルトで組み込まれた形で提供されるようになっており,これらのオペレーティングシステムをインストールするだけで利用可能となっています.

さて,前号で説明した SSH2 と OpenSSH バージョン2 (OpenSSH2) とでは,利用する鍵のフォーマットが若干異なっており,そのままでは相互運用ができません.本稿では,二種類のソフトウェアが混在した環境での運用を想定し,SSH2 のサーバに OpenSSH2 のクライアントでアクセスする場合,逆に OpenSSH2 のサーバに SSH2 のクライアントでアクセスする場合にそれぞれ必要となるユーザ鍵の設定方法について解説します.

2. SSH2 サーバに OpenSSH2 クライアントでアクセス

SSH2 サーバ (ホスト名 s_serv)に OpenSSH2 クライアント(ホスト名 o_clnt)でアクセスするには,o_clnt で作成したユーザの公開鍵を,s_serv$HOME/.ssh2 ディレクトリにコピーしなければなりません.ここではその手順を,OpenSSH クライアントホスト(o_clnt)側で作業する場合を想定して説明します.

OpenSSH2 でユーザ鍵の生成を行うには,ssh-keygen を用います.すでに,ユーザ鍵が生成されている場合にはこの手順を繰り返す必要はありません.

o_clnt% ssh-keygen -d -f $HOME/.ssh/id_dsa
      

を実行し,問い合わせに応じてパスフレーズを二度入力します.二度とも同じパスフレーズを入力すると公開鍵が $HOME/.ssh/id_dsa.pub に格納されますが,これは OpenSSH2 のフォーマットですので,SSH2 サーバで利用するためには次のようにフォーマット変換を行わなければなりません.

o_clnt% ssh-keygen -x -f $HOME/.ssh/id_dsa > o_clnt.pub
      

このコマンドを起動し,パスフレーズを入力すると SSH2 形式の公開鍵が o_clnt.pub に出力されます.変換後の鍵を scp コマンドなどで s_serv 上の所定位置にコピーし,アクセス権を正しく設定します.

o_clnt% scp o_clnt.pub s_serv:.ssh2/.
o_clnt% ssh s_serv chmod 600 .ssh2/o_clnt.pub
      

次に,転送した公開鍵の情報を s_serv$HOME/.ssh2/authorization に追加します.

o_clnt% echo "Key o_clnt.pub" | ssh s_serv tee -a .ssh2/authorization
o_clnt% ssh s_serv chmod 600 .ssh2/authorization
      

ここまで説明した準備を行うと,SSH2 サーバ(s_serv)において,OpenSSH2 クライアント(o_clnt)の鍵を用いたユーザ認証が可能になります.

3. OpenSSH2 サーバに SSH2 クライアントでアクセス

OpenSSH2 サーバ(ホスト名 o_serv) に SSH2 クライアント(ホスト名 s_clnt) でアクセスするには基本的に前項の逆を行うことになります.ここでは,s_clnt ではユーザ鍵が生成されているものとして,o_serv 側での作業手順を説明します.

OpenSSH2 サーバのデフォルト設定では,まず SSH のバージョン1プロトコルで RSA 認証を行うようになっていますが,必要ならば DSA 認証を先に行うように設定します.それには,o_serv の設定ファイル /etc/ssh/sshd_configProtocol2,1 とします.また,X11 のポートフォワーディングはデフォルトで認められない設定となっていますが,利用する場合には ForwardX11yes に設定します.

s_clnt のユーザ鍵を o_serv にコピーします.

o_serv% scp s_clnt:.ssh2/id_dsa_1024.pub s_clnt.pub
      

次にこの鍵を OpenSSH2 形式に変換するには,ssh_keygen -X を用います.このコマンドにより,標準出力に OpenSSH2 形式の公開鍵が出力されますので,これを OpenSSH2 の公開鍵束ファイル $HOME/.ssh/authorized_keys2 に追加します.このさいには,パスフレーズを要求されることはありません.

o_serv% ssh-keygen -X -f s_clnt.pub >> $HOME/.ssh/authorized_keys2
o_serv% chmod 600 $HOME/.ssh/authorized_keys2
o_serv% rm s_clnt.pub
      

ここまでの設定を行うと OpenSSH2 サーバ(o_serv)において,SSH2 クライアント(s_clnt)の鍵を用いたユーザ認証が可能になります.

OpenSSH2 クライアントの使用法は,前号で解説した SSH2 のものと基本的に同じですが,コマンドラインオプションに若干の違いがある場合もあります.利用にあたってはオンラインマニュアルなどを参考にしてください.

4. おわりに

本稿では,SSH2, OpenSSH2 が混在する環境において,クライアントとサーバでソフトウェアの種類が異なる場合の対処方法について解説しました.

なお,OpenSSH のバージョン 2.2.0 と SSH のバージョン 2.3.0 との間では鍵フォーマットの相違以前に,そもそも通信不可能であるという問題があります.この問題は新しいバージョンを利用すると解決されます.本稿執筆時点(2001年2月)での最新バージョンは,OpenSSH が 2.5.1p1,SSH が 2.4.0 です.