WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

SSH サーバーの構築

いい加減サーバーマシンの VMware Workstation 上で作業を行うのも不便になってきたので、 SSH ログインして他のクライアントマシンから管理作業ができるようにしようと思います。Gentoo Linux で利用可能な SSH 実装はいくつかありますが、ここでは最も一般的な OpenSSH を使います。

OpenSSH のインストール

OpenSSH のパッケージは Gentoo Linux のインストール時にデフォルトでインストールされるはずです。もしインストールされていなければ、以下のコマンドでインストールしましょう。

emerge openssh

/etc/ssh/sshd_config の設定

OpenSSH の SSH サーバーの設定ファイルは、"/etc/ssh/sshd_config" です。デフォルトのままでもだいたい動作するようですが、以下によく使用する設定を挙げておきます。

Protocol
接続を許可するプロトコルの指定です。デフォルトは 2 となっており、 SSH2 のみ接続を許可します。1,2 とすれば、SSH1, SSH2 の両方を許容します。
HostKey
ホストの認証鍵を指定します。
PermitRootLogin
root ユーザーの直接ログインを許可するかどうかを指定します。 no で不許可、 yes で許可、 without-password で公開鍵認証のみを許可、 forced-commands-only で特定のコマンドのみ許可となります。この設定にかかわらず、一般ユーザーからの su は可能です。
PasswordAuthentication
パスワード認証の許可指定です。 no で禁止、 yes で許可です。Gentoo Linux では、デフォルトで no になっています。パスワード認証はディクショナリーアタックなどの攻撃を受けやすいので、インターネットに公開する場合は no のままにしておくべきです。
RSAAuthentication
SSH1 の公開鍵認証の許可指定です。 no で禁止、 yes で許可です。
PubkeyAuthentication
SSH2 の公開鍵認証の許可指定です。 no で禁止、 yes で許可です。
AuthorizedKeysFile
公開鍵ファイルのパスを指定します。
RhostsRSAAuthentication
SSH1 のホストベース認証の許可指定です。 no で禁止、 yes で許可です。
HostbasedAuthentication
SSH2 のホストベース認証の許可指定です。 no で禁止、 yes で許可です。
ChallengeResponseAuthentication
ワンタイムパスワードを使用した認証の許可指定です。 no で禁止、 yes で許可です。
UsePAM
PAM を使用するかどうかを指定します。
Subsystem
主に SFTP プロトコルを使用するために、 "Subsystem sftp /usr/lib/misc/sftp-server" と指定します。
AllowTcpForwarding
ポート転送の許可指定です。 no で禁止、 yes で許可です。
X11Forwarding
X-WINDOW の転送の許可指定です。 no で禁止、 yes で許可です。

今回は、以下のように設定しました。

Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes
Subsystem sftp /usr/lib/misc/sftp-server

SSH サーバーの起動

まず、 SSH サーバーを起動しましょう。以下のコマンドで起動できます。

/etc/init.d/sshd start

初回起動時はホスト側の認証鍵の生成をするので、少し時間がかかります。次回の起動からはそれらはスキップされるので、すぐに起動するはずです。正常に起動したら、デフォルト起動の設定をしておきましょう。

rc-update add sshd default

ユーザーの認証鍵を生成

GentooLinux のデフォルトではパスワード認証が禁止されていますので、公開鍵認証を使うのが一般的です。それには、クライアント側で秘密鍵・公開鍵のペアを作成し、公開鍵をサーバーに転送しなければなりません。ここでは Linux などの UNIX 系クライアントから公開鍵認証でログインする方法をご紹介します。 Windows クライアントをお使いの方は、 Windows クライアントから SSH ログインするでログイン方法をご紹介していますので、そちらを参照してください。

それでは、まずはクライアントで鍵ペアを作成しましょう。手順は以下のとおりです。

  1. クライアントにログインする。
  2. "ssh-keygen -t rsa -b 2048" を実行する。
  3. 認証鍵を保存する場所を尋ねてくるので、そのまま Enter キーを押す。
  4. 秘密鍵を暗号化するためのパスワード(パスフレーズ)を尋ねてくるので、入力する。
  5. パスフレーズの確認を求めてくるので、再度パスフレーズを入力する。
  6. "chmod 600 ~/.ssh/*" を実行する。

これで、 "~/.ssh" の中に以下のファイルが作成されるはずです。これらのファイルのうち、 "id_rsa" はクライアントの正当性を証明するものなので、絶対に他人に知られないように注意してください。

ファイル名機能
id_rsaクライアント側で使用する秘密鍵
id_rsa.pubサーバー側に置いておく公開鍵

次に、上記のファイルのうち "id_rsa.pub" のみをなんらかの方法でサーバーに転送します。公開鍵なので他人に見られてもかまわないのですが、改ざんされると危険なので、なるべく安全な手段で転送してください。最後に、以下の手順で公開鍵を "authorized_keys" に追加します。

  1. サーバーにログインする。
  2. "cat ~/id_rsa.pub >> ~/.ssh/authorized_keys" を実行する("~/id_rsa.pub" はクライアントから転送した公開鍵です)。
  3. "chmod 600 ~/.ssh/*" を実行する。

"authorized_keys" はログインできるクライアントの公開鍵を集めたファイルです。 SSH サーバーにクライアントが接続すると、このファイルにある公開鍵とクライアントにある秘密鍵をマッチングし、マッチするものが見つかればログインを許可するという仕組みになっています。

動作確認

これで SSH ログインの準備が整いました。動作確認のために、 localhost に SSH でログインしてみましょう。手順は以下のとおりです。

  1. 先ほど認証鍵を作成したユーザーでログインする。
  2. "ssh -v localhost" を実行。 "-v" は詳細なデバッグメッセージを表示するオプションです。
  3. 初めてホスト(この場合 localhost)に SSH ログインする場合はホストの認証鍵が正しいかどうかを尋ねてきます。 "yes" と入力し、Enter キーを押します。
  4. パスフレーズを尋ねてくるので、ユーザーの認証鍵の生成時に入力したパスフレーズを入力し、Enter キーを押します。

これで正常にログインできれば、 SSH サーバーが機能しています。確認できたら、 "exit" コマンドでリモートログインを終了しましょう。

サーバー側の設定はこれでほぼ終了です。明日は、 Windows クライアントから SSH ログインする方法をご紹介したいと思います。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles