OpenSSL/OpenSSH(SSH1) の設定に関するメモ(2003/02/05) 
 

 

環境

・Intel-Solaris8 2/02版 (SunOS 5.8)  

・OpenSSL は、openssl-0.9.6h を使用

・OpenSSH は、openssh-3.4p1 を使用

sshでのログイン方法をRSA認証(ホスト秘密キー)に対してのアクセスを行う事とします

OpenSSLとは

OpenSSL とは、Secure Sockets Layer(SSL v2/v3)および Transport Layer Security(TLS v1)を実装した高機能なオープンソースのツールキットである。OpenSSL ツールキットには Apache 形式のライセンスが供与されているため、いくつかの簡単なライセンスの制約下でなら、入手や商用・非商用の利用は自由である。ライセンスの詳細は、LICENCE ファイルを参照すること。

OpenSSHとは

OpenSSH  とは、SSH の FREE バージョンである。OpenSSH には rlogin や telnet を置き換える ssh、rcp や ftp を置き換える scp などのプログラムが含まれている。

最新版は OpenSSH 3.4p1 である。これは SSH1プロトコル(1.3/1.5)、SSH2プロトコルをサポートしており、商用版の SSH1/2 と等価的に利用できる。配布や利用に制限のかかる部分はすべて OpenSSL のような外部のライブラリを使用するようになっている。このため、OpenSSH を利用するには OpenSSL が必要となる。

コンパイルには、Zlib および /dev/randam デバイス、および TCP_Wrappers(必須では、ありませんが)のインストールが必要です。インストールが終了すると。ssh(リモートホスト上でコマンドを実行)、slogin(リモートホストにログイン)、scp(リモートホストとの間でファイルをコピー)などのセキュアなコマンドが使えます。

OpenSSLをインストール

下記のコマンドを実行してする。(結構、時間かかります) が、下線の部分は・・・・?

% cd /opt/local/src
% wget http://www.openssl.org/source/openssl-0.9.6h.tar.gz
% gzip -cd openssl-0.9.6h.tar.gz | tar xvf -
% cd openssl-0.9.6h
% ./Configure --prefix=/usr/local --openssldir=/etc/ssl shared solaris-x86-gcc
   ※上記赤い部分は、各マシン構成により指定が異なります
% make
% su
# make install
# strip /usr/local/bin/openssl
# make do_solaris-shared
# cp libcrypto.so.0.9.6 /usr/local/lib
# cp libssl.so.0.9.6 /usr/local/lib
# cd /usr/local/lib
# ln -sf libcrypto.so.0.9.6 libcrypto.so.0
# ln -sf libcrypto.so.0.9.6 libcrypto.so
# ln -sf libssl.so.0.9.6 libssl.so.0
# ln -sf libssl.so.0.9.6 libssl.so

※ Configure / configure 時に Perl を使用しますので、必ずちゃんとインストールしてくださいぃ。だめだと下記の様なエラーが出ることがあります。

% perl -v
ld.so.1: perl: 重大なエラー: libgdbm.so.2: open に失敗しました: ファイルもディレクトリもありません

OpenSSHをインストール

OpenSSH サイトより、Linux版のモジュールをダウンロードし展開する。

% cd /opt/local/src
% wget ftp://ftp.kddlabs.co.jp/OpenBSD/OpenSSH/portable/openssh-3.4p1.tar.gz
% gzip -cd openssh-3.4p1.tar.gz | tar xf -
% cd openssh-3.4p1
% ./configure --prefix=/usr/local \
    --sysconfdir=/etc/ssh --with-cflags=-O3 \
    --with-tcp-wrappers --with-egd-pool=/var/run/egd-pool
% make
% su
# make install

※ sshd ユーザが作成されていないと WARNING が表示されるが気にしない気にしない! by あとで作成

/dev/randam デバイスがインストールされていないと configure 終了時に以下のメッセージが表示されます。

WARNING: you are using the builtin random number collection
service. Please read WARNING.RNG and request that your OS
vendor includes kernel-based random number collection in
future versions of your OS.

 

サーバ側の設定(sshd)

1) sshd アカウントを作成します。このユーザが無いと openssh が実行されません。注意点として、root のグループで作成します。

# groupadd sshd
# useradd -g root -d /export/home/sshd -s /bin/tcsh -m sshd

2) rootアカウントでログインし、SSH経由でログインするときの認証方法を設定します。 /etc/ssh/sshd_config 内の項目を以下の様に修正する。

Protocol 1,2                 ← TTSSH は、ssh2(Protocol 2)をサポートしていません
PermitRootLogin no           ← rootのログインを無効
IgnoreRhosts no              ← r系コマンドを無効
RhostsAuthentication no      ← rhostの認証を無効
RhostsRSAAuthentication no   ← 
RSAAuthentication yes        ← 
PasswordAuthentication no    ← yes にすると、テキスト認証が可能です
IgnoreUserKnownHosts yes     ←

サーバ側の設定(sshdの起動)

1) sshを自動起動する様に設定します。

# cd /etc/init.d
# vi openssh
# chmod +x openssh
# ln -s /etc/init.d/openssh /etc/rc3.d/S49openssh

sshd ユーザを作成していないと、次の様なエラーが表示されます。

Privilege separation user sshd does not exist
OpenSSH starting.

サーバ側の設定(ユーザの秘密鍵作成)

1) ログインすべきユーザ(ここでは hoge)で、以下のコマンドを実行します。

% ssh-keygen -t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home2/hoge/.ssh/identity):
Created directory '/home2/hoge/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home2/hoge/.ssh/identity.
Your public key has been saved in /home2/hoge/.ssh/identity.pub.
The key fingerprint is:
30:51:ff:5f:b8:33:99:41:ff:ff:ff:ee:c4:b3:4e:34 hoge@ns

※ passphrase とは、RSA認証時に要求される文字列を指し、ここで例としている hoge ユーザのパスワードでは、ない事に注意する。
※ ここでは passphrase に 「hogehoge」と設定した。
※ "-c" オプションで、コメントをつけると複数存在するキーの区別がつきやすくなります。

2) クライアント認証時に対するファイルの設定を行います。

% cat ~/.ssh/identity.pub > ~/.ssh/authorized_keys
% chmod 600 ~/.ssh/authorized_keys

3) クライアントに秘密鍵( ~/.ssh/identity )をファイル転送した後は、サーバ側の秘密鍵を削除します。これは、セキュリティ好ましくないための処置です。

※) "-p" オプションを指定することによりパスフレーズのみを変更することも可能です。

クライアント側の設定(UNIXからの接続)

1) 上記説明で作成した秘密鍵( ~/.ssh/identity )を、接続するクライアントに ftp等をして任意の場所にコピーします。でもって属性も 600(ここ重要!) にします。(名前を変えておいた方がいいかも。で、ここでは host_hoge って名前でコピーします)

% mv identity host_hoge
% chmod 600 host_hoge

2) コマンドラインから ssh を実行します。が・・・・エラーになります。

% ssh -i host_hoge -l hoge hoge
Permission denied (publickey,keyboard-interactive).

3) なぜエラーになるかと言うと、デフォルトで protcol2 でアクセスしにいくのです。ですので・・・

% ssh -i host_hoge -l hoge -1 hoge
Enter passphrase for RSA key 'host_hoge':  ← ここで
passphrase に入れた 「hogehoge」を
Last login: Wed Jul 17 17:34:56 2002 from xxx.xxx.xxx.xxx
Sun Microsystems Inc. SunOS 5.8 Generic February 2000
Sun Microsystems Inc. SunOS 5.8 Generic February 2000
hoge@hoge%

4) OKっしょ?

クライアント側の設定(TeraTermでの接続)

1) 上記説明で作成した秘密鍵( ~/.ssh/identity )を、接続するクライアントのハードディスクにコピーします。

2) TeraTerm + TTSH で、SSH接続するサーバを指定します。

3) ”RSA認証鍵を使う”を選択し、個人鍵には先程クライアントのハードディスクにコピーした秘密鍵(identity)のあるディレクトリを指定します。

4) ユーザ名/パスフレーズに、該当の文字列を入れる。
※ いままでの説明でのユーザの場合は、以下の通りとなります。

ユーザ名        : hoge
パスフレーズ    : hogehoge
RSA認証鍵を使う : チェック
個人鍵          : 秘密鍵 (identity)のあるディレクトリを指定する

5) OKボタンを押下する。

クライアント側の設定(TeraTermのデフォルト設定)

毎回、秘密鍵(identity)の設定、ユーザ名の設定をするのは面倒だと言う場合は、TeraTerm + TTSH の設定を以下の様に設定します。

1) メニューから「設定-SSH認証」を選択し、デフォルトで使用する情報を入力する。

ユーザ名        : hoge
RSA認証鍵を使う : チェック
個人鍵          : 秘密鍵 (identity)のあるディレクトリを指定する

2) メニューから「設定-設定の保存」を選択し、teraterm.ini を保存する。

※ TeraTerm の デフォルトインストール先は、"C:\Program Files\TTERMPRO\"

ざれごと・・・

これから・・・ってな具合で、こんなことを覚えておくと とっても 良いです。