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 ログインするでログイン方法をご紹介していますので、そちらを参照してください。
それでは、まずはクライアントで鍵ペアを作成しましょう。手順は以下のとおりです。
- クライアントにログインする。
- "ssh-keygen -t rsa -b 2048" を実行する。
- 認証鍵を保存する場所を尋ねてくるので、そのまま Enter キーを押す。
- 秘密鍵を暗号化するためのパスワード(パスフレーズ)を尋ねてくるので、入力する。
- パスフレーズの確認を求めてくるので、再度パスフレーズを入力する。
- "chmod 600 ~/.ssh/*" を実行する。
これで、 "~/.ssh" の中に以下のファイルが作成されるはずです。これらのファイルのうち、 "id_rsa" はクライアントの正当性を証明するものなので、絶対に他人に知られないように注意してください。
ファイル名 | 機能 |
---|---|
id_rsa | クライアント側で使用する秘密鍵 |
id_rsa.pub | サーバー側に置いておく公開鍵 |
次に、上記のファイルのうち "id_rsa.pub" のみをなんらかの方法でサーバーに転送します。公開鍵なので他人に見られてもかまわないのですが、改ざんされると危険なので、なるべく安全な手段で転送してください。最後に、以下の手順で公開鍵を "authorized_keys" に追加します。
- サーバーにログインする。
- "cat ~/id_rsa.pub >> ~/.ssh/authorized_keys" を実行する("~/id_rsa.pub" はクライアントから転送した公開鍵です)。
- "chmod 600 ~/.ssh/*" を実行する。
"authorized_keys" はログインできるクライアントの公開鍵を集めたファイルです。 SSH サーバーにクライアントが接続すると、このファイルにある公開鍵とクライアントにある秘密鍵をマッチングし、マッチするものが見つかればログインを許可するという仕組みになっています。
動作確認
これで SSH ログインの準備が整いました。動作確認のために、 localhost に SSH でログインしてみましょう。手順は以下のとおりです。
- 先ほど認証鍵を作成したユーザーでログインする。
- "ssh -v localhost" を実行。 "-v" は詳細なデバッグメッセージを表示するオプションです。
- 初めてホスト(この場合 localhost)に SSH ログインする場合はホストの認証鍵が正しいかどうかを尋ねてきます。 "yes" と入力し、Enter キーを押します。
- パスフレーズを尋ねてくるので、ユーザーの認証鍵の生成時に入力したパスフレーズを入力し、Enter キーを押します。
これで正常にログインできれば、 SSH サーバーが機能しています。確認できたら、 "exit" コマンドでリモートログインを終了しましょう。
サーバー側の設定はこれでほぼ終了です。明日は、 Windows クライアントから SSH ログインする方法をご紹介したいと思います。
詳しくはこちらの記事をどうぞ!
この記事にコメントする