12.2. OpenSSH の設定
12.2.1. 設定ファイル
設定ファイルには、クライアントプログラム用 (ssh
、scp
および sftp
) とサーバー用 (sshd
デーモン) の異なる 2 つのセットがあります。
システム全体の SSH 設定情報は、表12.1「システム全体の設定ファイル」 にあるように、/etc/ssh/
ディレクトリー内に格納されています。ユーザー固有の SSH 設定情報は、ユーザーのホームディレクトリー内の ~/.ssh/
に格納されています。詳細は、表12.2「ユーザー固有の設定ファイル」 に記載しています。
ファイル | 詳細 |
---|---|
| セキュアなトランスポート層を構築するのに非常に重要となる、Diffie-Hellman 鍵交換に使用される Diffie-Hellman グループが置かれています。SSH セッションの初めに鍵が交換される時、共有秘密値が作成されますが、どちらか一方の当事者だけでは決定できません。この値は、ホスト認証を行うのに使用されます。 |
|
デフォルトの SSH クライアント設定ファイルです。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ファイル | 詳細 |
---|---|
| サーバー用の認証済み公開鍵のリストがあります。クライアントがサーバーに接続すると、サーバーが、このファイル内に格納されている署名済み公開鍵を確認してクライアントを認証します。 |
| ユーザーの ECDSA 秘密鍵を格納します。 |
| ユーザーの ECDSA 公開鍵です。 |
|
|
|
|
| ユーザーがアクセスする SSH サーバーのホスト鍵を格納します。このファイルは、SSH クライアントが正しい SSH サーバーに接続していることを確認するのに使用するため、非常に重要です。 |
SSH サーバーを設定する場合は、/etc/ssh/sshd_config
ファイルの UsePrivilegeSeparation no ディレクティブで Privilege Separation
機能をオフにしないでください。Privilege Separation
をオフにすると、多くのセキュリティー機能が無効になるため、サーバーが潜在的な脆弱性にさらされ、攻撃対象となります。UsePrivilegeSeparation の詳細は、sshd_config
(5) man ページ、または Red Hat ナレッジベースの記事 What is the significance of UsePrivilegeSeparation directive in /etc/ssh/sshd_config file and how to test it? を参照してください。Red Hat ナレッジベースの記事。
SSH 設定ファイルに使用可能な各種ディレクティブの情報は、ssh_config
(5) および sshd_config
(5) の man ページを参照してください。
12.2.2. OpenSSH サーバーの起動
OpenSSH サーバーを実行するには、openssh-server パッケージがインストールされている必要があります。新規パッケージのインストール方法は 「パッケージのインストール」 を参照してください。
現行のセッションで sshd
デーモンを起動するには、root
権限でシェルプロンプトに以下を入力します。
~]# systemctl start sshd.service
現行のセッションで sshd
デーモンを停止するには、root
として以下のコマンドを使用します。
~]# systemctl stop sshd.service
ブート時にデーモンが自動的に起動するようにするには、root
で以下を入力します。
~]# systemctl enable sshd.service Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.
sshd
デーモンは network.target
ターゲットユニットに依存しますが、静的設定のネットワークインターフェイスやデフォルトの ListenAddress
0.0.0.0
オプションの場合はこれで十分です。ListenAddress
ディレクティブで別のアドレスを指定し、より遅い動的ネットワーク設定を使用するには、network-online.target
ターゲットユニットの依存関係を sshd.service
ユニットファイルに追加します。これを行うには、/etc/systemd/system/sshd.service.d/local.conf
ファイルを以下のオプションで作成します。
[Unit] Wants=network-online.target
After=network-online.target
この後、次のコマンドを実行して、systemd
マネージャー設定を再ロードします。
~]# systemctl daemon-reload
Red Hat Enterprise Linux でシステムサービスを管理する方法は、10章systemd によるサービス管理 を参照してください。
システムを再インストールすると、新しい識別鍵のセットが作成される点に注意してください。したがって、再インストールの前にいずれかの OpenSSH ツールを使用してシステムに接続したことがあるクライアントには、以下のようなメッセージが表示されます。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed.
これを防ぐには、/etc/ssh/
ディレクトリーから関連ファイルをバックアップしておきます。ファイルのリストは 表12.1「システム全体の設定ファイル」 を参照してください。これで、システムの再インストール時にファイルを復元できます。
12.2.3. リモート接続に必要な SSH
SSH を本当の意味で有効なものにするためには、セキュリティー保護されていない接続プロトコルは使用しないことを推奨します。このような接続プロトコルを使用すると、ユーザーのパスワード自体は SSH を使用した 1 回のセッションで保護されても、その後に Telnet を使用してログインした時に傍受されてしまうためです。無効にするサービスには、telnet
、rsh
、rlogin
、vsftpd
などがあります。
vsftpd
サービスの設定方法は、「FTP」 を参照してください。Red Hat Enterprise Linux 7 でシステムサービスを管理する方法については、10章systemd によるサービス管理 をお読みください。
12.2.4. 鍵ベース認証の使用
システムのセキュリティーをさらに強化するには、SSH 鍵のペアを生成し、パスワード認証を無効にすることで鍵ベース認証を強制します。これを行うには、vi、nano などのテキストエディターで /etc/ssh/sshd_config
設定ファイル開き、PasswordAuthentication
オプションを以下のように変更します。
PasswordAuthentication no
新規のデフォルトインストール以外のシステムで作業をしている場合は、PubkeyAuthentication no
が設定されて いない ことを確認してください。リモートで接続している場合は、コンソールもしくは帯域外アクセスを使用せず、パスワード認証を無効にする前にプロセス内で鍵ベースのログをテストすることが推奨されます。
ssh
、scp
、または sftp
を使用してクライアントマシンからサーバーに接続できるようにするには、以下の手順に従って認証鍵ペアを生成します。鍵はユーザーごとに別々に生成する必要がある点に注意してください。
NFS がマウントされたホームディレクトリーで鍵ベースの認証を使用するには、最初に SELinux ブール値 use_nfs_home_dirs
を有効にします。
~]# setsebool -P use_nfs_home_dirs 1
Red Hat Enterprise Linux 7 は、デフォルトで SSH プロトコル 2 および RSA 鍵を使用します (詳細は 「プロトコルのバージョン」 を参照してください)。
これらのステップを root
で完了すると、鍵を使用できるのは root
のみになります。
システムを再インストールする際に、生成しておいた鍵ペアを引き続き使用する場合は、~/.ssh/
ディレクトリーのバックアップを作成します。再インストール後に、このディレクトリーをホームディレクトリーにコピーします。この手順は、システムの全ユーザー (root
を含む) が実行できます。
12.2.4.1. 鍵ペアの生成
以下の手順に従って、SSH プロトコルのバージョン 2 用の RSA 鍵ペアを生成します。
RSA 鍵ペアを生成するには、シェルプロンプトで次のコマンドを実行します。
~]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/USER/.ssh/id_rsa):
-
Enter キーを押して、新規作成される鍵のデフォルトの場所 (
~/.ssh/id_rsa
) を確認します。 パスフレーズを入力します。プロンプトが表示されたら再入力して確認します。セキュリティー上の理由により、アカウントのログイン時に使用するパスワードは使用しないでください。
この後、以下のようなメッセージが表示されます。
Your identification has been saved in /home/USER/.ssh/id_rsa. Your public key has been saved in /home/USER/.ssh/id_rsa.pub. The key fingerprint is: SHA256:UNIgIT4wfhdQH/K7yqmjsbZnnyGDKiDviv492U5z78Y \USER@penguin.example.com The key's randomart image is: +---[RSA 2048]----+ |o ..==o+. | |.+ . .=oo | | .o. ..o | | ... .. | | .S | |o . . | |o+ o .o+ .. | |+.++=o*.o .E | |BBBo+Bo. oo | +----[SHA256]-----+
注記以前のバージョンでデフォルトのフィンガープリントである MD5 鍵フィンガープリントを取得する場合は、
ssh-keygen
コマンドで-E md5
オプションを使用します。デフォルトで、
~/.ssh/
ディレクトリーのパーミッションは、rwx------
または 8 進数表記の700
に設定されます。これは、USER のみがコンテンツを表示できるようにする設定です。必要に応じて、次のコマンドで確認できます。~]$
ls -ld ~/.ssh
drwx------. 2 USER USER 54 Nov 25 16:56 /home/USER/.ssh/公開鍵をリモートマシンにコピーするには、次の形式でコマンドを実行します。
ssh-copy-id user@hostname
これにより、最近変更した
~/.ssh/id*.pub
公開鍵がインストールされていない場合は、その公開鍵をコピーします。または、以下のように、公開鍵のファイルを指定します。ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostname
これにより、
~/.ssh/id_rsa.pub
の内容が、接続するマシンの~/.ssh/authorized_keys
ファイルにコピーされます。ファイルが存在する場合は、鍵がその最後に追加されます。
SSH プロトコルのバージョン 2 用の ECDSA 鍵ペアを生成するには、以下の手順に従います。
ECDSA 鍵ペアを生成するには、シェルプロンプトで次のコマンドを実行します。
~]$ ssh-keygen -t ecdsa Generating public/private ecdsa key pair. Enter file in which to save the key (/home/USER/.ssh/id_ecdsa):
-
Enter キーを押して、新規作成された鍵用のデフォルトの場所 (
~/.ssh/id_ecdsa
) を確認します。 パスフレーズを入力します。プロンプトが表示されたら再入力して確認します。セキュリティー上の理由により、アカウントのログイン時に使用するパスワードは使用しないでください。
この後、以下のようなメッセージが表示されます。
Your identification has been saved in /home/USER/.ssh/id_ecdsa. Your public key has been saved in /home/USER/.ssh/id_ecdsa.pub. The key fingerprint is: SHA256:8BhZageKrLXM99z5f/AM9aPo/KAUd8ZZFPcPFWqK6+M \USER@penguin.example.com The key's randomart image is: +---[ECDSA 256]---+ | . . +=| | . . . = o.o| | + . * . o...| | = . . * . + +..| |. + . . So o * ..| | . o . .+ = ..| | o oo ..=. .| | ooo...+ | | .E++oo | +----[SHA256]-----+
デフォルトで、
~/.ssh/
ディレクトリーのパーミッションは、rwx------
または 8 進数表記の700
に設定されます。これは、USER のみがコンテンツを表示できるようにする設定です。必要に応じて、次のコマンドで確認できます。~]$
ls -ld ~/.ssh
~]$ ls -ld ~/.ssh/ drwx------. 2 USER USER 54 Nov 25 16:56 /home/USER/.ssh/公開鍵をリモートマシンにコピーするには、次の形式でコマンドを実行します。
ssh-copy-id USER@hostname
これにより、最近変更した
~/.ssh/id*.pub
公開鍵がインストールされていない場合は、その公開鍵をコピーします。または、以下のように、公開鍵のファイルを指定します。ssh-copy-id -i ~/.ssh/id_ecdsa.pub USER@hostname
これにより、
~/.ssh/id_ecdsa.pub
の内容が、接続するマシンの~/.ssh/authorized_keys
にコピーされます。ファイルが存在する場合は、鍵がその最後に追加されます。
システムにパスフレーズを記憶させる設定方法については 「ssh-agent の設定」 を参照してください。
秘密鍵は、個人使用を目的としているため、他人には決して教えないでください。
12.2.4.2. ssh-agent の設定
ssh-agent
認証エージェントを使用するとパスフレーズを保存することができるため、リモートマシンとの接続を開始する度にパスフレーズを入力する必要がなくなります。GNOME を実行している場合は、ログイン時には常にパスフレーズを求めるプロンプトを表示して、セッションを通してそのパスフレーズを記憶させておくように設定できます。それ以外の方法として、特定のシェルプロンプト用にパスフレーズを保存しておくことも可能です。
以下のステップに従って、GNOME セッション中にパスフレーズを保存します。
- openssh-askpass パッケージがインストールされていることを確認します。Red Hat Enterprise Linux に新しいパッケージをインストールする方法の詳細は、「パッケージのインストール」 を参照してください。
Super キーを押してアクティビティーの概要に入り、
Startup Applications
と入力して Enter を押します。Startup Applications Preferences ツールが表示されます。デフォルトでは、利用可能なスタートアッププログラムのリストを含むタブが表示されます。Super キーはキーボードや他のハードウェアによって外見が異なりますが、通常はスペースバーの左側にある Windows キーまたは Command キーになります。図12.1 自動起動するアプリの設定
右側の
ボタンをクリックして、コマンド
フィールドに/usr/bin/ssh-add
と入力します。図12.2 新規アプリケーションの追加
図12.3 アプリケーションの有効化
一度ログアウトしてから再度ログインします。パスフレーズの入力を求めるダイアログボックスが表示されます。これ以降は、
ssh
、scp
、またはsftp
によるパスワードの入力を要求されることはありません。図12.4 パスフレーズの入力
特定のシェルプロンプト用のパスフレーズを保存するには、以下のコマンドを使用します。
~]$ ssh-add Enter passphrase for /home/USER/.ssh/id_rsa:
ログアウト時には、パスフレーズは記憶されない点に注意してください。仮想コンソールまたはターミナルウィンドウにログインする度にコマンドを実行する必要があります。