SSHのホストベース認証設定

[概  要]

OpenSSHでは複数のユーザ認証方式がサポートされており、デフォルトの状態では、「パスワード認証」が可能となっています。
本ドキュメントでは、それらのユーザ認証方式のうち、「ホストベース認証(Hostbased認証)」について説明します。

(本ドキュメントでは、sshサーバ、クライアントとも、Asianux Server 3を使用しています。)

  

[注意事項]

本ドキュメントは、各ソフトウェア開発元の情報およびマニュアル等を元にした参考情報です。

本ドキュメントの内容は、予告なしに変更される場合があります。

 

本ドキュメントは、限られた評価環境における検証結果をもとに作成しており、全ての環境での動作を保証するものではありません。

本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、弊社はその損害についての責任を負いません。あくまでお客様のご判断にてご使用ください。

 

[ホストベース(Hostbased)認証とは]
ホストベース認証とは、sshサーバとクライアントが、ユーザレベルの認証を省略して、直接認証を行う認証方式です。この方式では、サーバに登録済みのクライアントマシンから接続があった場合は、そのクライアントマシンのユーザ情報についても信用して接続を許可します。

 

この方式を使用した場合、例えばシステム管理者が複数のクライアントを一元管理しており、各マシンに同一のユーザアカウントが存在するような環境では、ユーザがパスワードやパスフレーズを入力せずに各マシンにログインすることができます。

 

[確認環境]
本ドキュメントの動作環境は以下のとおりです。

 

sshサーバ

使用OS Asianux Server 3

ホスト名:server.example.com

IPアドレス:10.1.1.100

関連パッケージバージョン:

openssh-4.3p2-16.1AX

openssh-server-4.3p2-16.1AX

openssl-0.9.8b-8.3

 

sshクライアント

使用OS Asianux Server 3

ホスト名:client.example.com

IPアドレス : 10.1.1.200

関連パッケージバージョン:

openssh-4.3p2-16.1AX

openssh-clients-4.3p2-16.1AX

openssl-0.9.8b-8.3

 

 

[設定方法-1]
以下の手順は、クライアントからsshサーバに、同一ユーザ名でログインする場合に有効です。
クライアント側とサーバ側でユーザ名が異なる場合は、[設定方法-2]をご参照ください。
shosts.equivファイルを使用する方法では、rootでの接続は許可されません。rootユーザでログインする場合には[設定方法-2]をご参照ください。

 

ホストベース認証の流れ

 

 

 

クライアントからsshサーバへ接続
クライアントの正当性を確認するために、登録済みホスト公開鍵に対応するホスト秘密鍵の証明を要求
ホスト秘密鍵を所有していることを証明

 

 

サーバ側設定

 

1.sshサービスが起動していない場合は起動します。

(先頭の#rootユーザのコマンドプロンプトをあらわします)

 

 

# service sshd start

 

 

次回以降、OS起動時に自動でsshサービスを起動させる場合には、以下のコマンドを実行します。

 

 

# chkconfig sshd on

 

 

2.クライアントのホスト公開鍵を、sshサーバの/etc/ssh/ssh_known_hostsファイルに登録します。

 

(1)sshサーバに、クライアントのホスト公開鍵をコピーしておきます。

以下の例では、クライアントscpコマンドを使用し、sshサーバの/tmpディレクトリへコピーしています。

 

 

# scp /etc/ssh/ssh_host_rsa_key.pub 10.1.1.77:/tmp/

 

 

(補足1)

手順(1)の前に、クライアントの/etc/sshディレクトリに秘密鍵・公開鍵ペアが存在しない場合は、クライアント上で鍵ペアを生成します。(鍵ペアが既に存在する場合は不要です。)

以下の例ではRSA方式の鍵ペアを生成しています。コマンドはクライアント上で実行してください。

 

 

# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -C '' -N ''

 

 

(2)コピーしたホスト公開鍵を/etc/ssh/ssh_known_hostsファイルに登録します。

クライアントホスト名の後ろには半角スペースが1つ入ります。

 

 

# ( echo -n 'クライアントのホスト名 ' ; cat /tmp/ssh_host_rsa_key.pub ) >> /etc/ssh/ssh_known_hosts

 

 

)クライアントのホスト名 client.example.comの場合

 

# ( echo -n 'client.example.com ' ; cat /tmp/ssh_host_rsa_key.pub ) >> /etc/ssh/ssh_known_hosts

 

 

(3)サーバの/etc/ssh/ssh_known_hostsファイルに、クライアントのホスト公開鍵が書き込まれていることを確認します。

 

 

# cat ssh_known_hosts

client.example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsXDC…

....

 

 

 

(補足2)

手順(1)~(2)のかわりに、ssh-keyscanコマンドを使用して、直接ホストの公開鍵を収集することも可能です。ssh-keyscanは、sshクライアントがSecure Shell デーモン(sshd)が稼動するホストの公開鍵を収集するためのコマンドであり、openssh-clientパッケージに含まれています。

本ドキュメントの環境の場合は、クライアント側(10.1.1.200)sshdを起動し、sshサーバ側(10.1.1.100)で下記のコマンドを実行することで、sshサーバにクライアントのホスト公開鍵を登録することができます。

 

 

# ssh-keyscan -t rsa client.example.com >> /etc/ssh/ssh_known_hosts

 

 

 

2./etc/ssh/shosts.equivファイルを作成します。

shosts.equivファイルには、ホストベース認証を許可するホスト名とユーザを記述します。

DNSを使用している場合、このファイルにはIPアドレスではなくホスト名を記述します。

 

 

ホスト名 ユーザ名

 

 

1)client.example.com (rootを除く)すべてのユーザにホストベース認証を許可する。

 

client.example.com

 

 

2)client.example.com user1ユーザにホストベース認証を許可する。

 

client.example.com user1

 

 

 

3./etc/ssh/sshd_configを編集します。

ホストベース認証を使用するためには"HostbasedAuthentication”yesにしてください。

なお、以下は最低限必要な設定です。必要に応じで他の設定を変更してください。

sshd_configの設定項目については、オンラインマニュアル(man sshd_config)をご参照ください。

 

 

HostbasedAuthentication yes

 

 

4.sshサーバを再起動します。

 

 

# service sshd restart

 

 

 

クライアント側設定

 

/etc/ssh/ssh_configを編集します。

"EnableSSHKeysign”はホストベース認証で使用する ssh の補助プログラムです。

なお、以下は最低限必要な設定です。必要に応じで他の設定を変更してください。

ssh_configの設定項目については、オンラインマニュアル(man ssh_config)をご参照ください。

 

 

EnableSSHKeysign yes

HostbasedAuthentication yes

 

 

 

接続確認

 

サーバ上のshosts.equivファイルに登録したユーザで、sshコマンドを実行し、パスワード無しでログインできることを確認します。

 

 

$ ssh server.example.com

 

 

 

[設定方法-2]

クライアント側とサーバ側でユーザ名が異なる場合や、rootユーザで接続したい場合、サーバ側のユーザのホームディレクトリに、.shosts ファイルを作成します。

 

サーバ側設定

 

1.[設定方法-1]と同様に1.クライアントのホスト公開鍵を、sshサーバに登録してください。

 

2.ログインを許可するユーザのホームディレクトリに、.shostsファイルを作成します。

以下の例では、クライアント側のuserAから、sshサーバ側のuserBとしてログインするために、userBのホームディレクトリの .shostsファイルに、userAを記述しています。

 

 

client.example.com userA

 

 

3.~/.shosts のパーミッションを変更します。

 

 

$ chmod 600 ~/.shosts

 

 

4/etc/ssh/sshd_configを編集します。

~/.shostsファイルを使用する場合は、"IgnoreRhosts”"no”に設定します。

 

 

PermitRootLogin yes ←rootによるログインを許可する場合にはyesにします。

HostbasedAuthentication yes

IgnoreRhosts no

 

 

5.sshサーバを再起動します。

 

 

# service sshd restart

 

 

 

クライアント側

 

/etc/ssh/ssh_configを編集します。最低限必要な設定は[設定方法-1]と同じです。

 

 

EnableSSHKeysign yes

HostbasedAuthentication yes

 

 

 

接続確認

 

sshサーバ上のユーザの~/.shostsファイルに登録したユーザで、sshコマンドを実行し、パスワード無しでログインできることを確認します。

以下の例では、クライアントのuserAユーザで、sshサーバ(server.example.com)userBとしてログインしています。

 

 

$ ssh userB@server.example.com

 

 

 

[更新履歴]
2008年 3月 3日 新規作成