SSHの基本設定と公開鍵認証の安全な設定方法
このページの目的:SSH設定を変更・利用する前に、接続条件と公開鍵認証の構成を確認し、接続不能や認証事故を防ぐ
このページで分かること
- SSH接続でクライアントとサーバーが確認するもの
- ユーザー名・ホスト・ポートの指定方法
- 公開鍵認証と
authorized_keysの関係 - 秘密鍵・
.sshの安全な権限 sshd_config変更前後の確認方法~/.ssh/configで接続設定を固定する方法
先に結論
SSHは「接続先」「ユーザー」「ポート」「認証方式」「鍵」を分けて確認します。設定変更時は既存セッションを残し、sshd -tで構文確認してから別セッションで再接続を確認します。
SSH接続で指定する4つの要素
SSH接続では、少なくとも「接続先」「ユーザー」「ポート」「認証方法」を意識します。単にIPアドレスへ到達できても、ユーザー名や鍵が違えば認証は成功しません。
| 要素 | 例 | 確認ポイント |
|---|---|---|
| 接続先 | example-server | DNS名またはIPが意図したサーバーを指しているか |
| ユーザー | user | サーバー上に存在し、SSHログインを許可されているか |
| ポート | 22 | sshdのListenポートとFirewallの許可が一致するか |
| 鍵 | ~/.ssh/id_ed25519 | 対応する公開鍵が接続先ユーザーへ登録されているか |
ssh hostだけで接続するとローカルのユーザー名が使われる場合があるため、運用では接続ユーザーを明示すると確認しやすくなります。公開鍵認証の仕組み
公開鍵認証では、クライアント側に秘密鍵、サーバー側の対象ユーザーに対応する公開鍵を配置します。秘密鍵そのものをサーバーへコピーする必要はありません。
authorized_keysは「このユーザーへのログインに使用してよい公開鍵」の一覧です。別ユーザーのホームディレクトリへ登録しても、そのユーザーで接続しない限り通常は使われません。
鍵とディレクトリの権限
OpenSSHは秘密鍵やサーバー側の鍵配置場所が不用意に他ユーザーから書き換え可能な状態を嫌います。まず所有者と権限を確認します。
上記は一般的な安全設定例です。環境のポリシーや共有要件がある場合は、必要以上に権限を広げず要件に合わせて設定してください。
SSH鍵の権限を確認する
秘密鍵や.sshの権限を数値表記・rwx表記で確認できます。
sshd設定を変更する前の確認
サーバー側では/etc/ssh/sshd_configやsshd_config.d配下の設定が使われます。変更前に実効設定と構文を確認します。
構文エラーがなければ、ディストリビューションに応じてsshdまたはsshサービスをreload/restartします。サービス名は環境で異なるため確認してから操作します。
SSHクライアント設定
毎回ユーザー・ポート・鍵を指定する場合は~/.ssh/configへまとめると、鍵の指定漏れやユーザー名間違いを減らせます。
設定後はssh app-prodで接続できます。実際にどの設定が適用されるかは次で確認できます。
接続前チェックリスト
- 接続先ホスト名・IPは正しい
- 接続先ユーザーがサーバー上に存在する
- sshdが想定ポートで待ち受ける設定になっている
- 接続元ネットワークが許可範囲に含まれる
- 使用する秘密鍵が端末にあり、正しい鍵を指定している
- 対応する公開鍵が対象ユーザーの
authorized_keysへ登録されている - 秘密鍵・
.ssh・authorized_keysの所有者と権限が適切 - sshd設定変更後に
sshd -tが成功する