SSH サーバーを安全に運用するには、いくつかのベストプラクティスがあります。
ここでは、root ユーザーでの SSH 接続を拒否 (PermitRootLogin no
) する設定例を紹介します。
---
- hosts: all
gather_facts: false
become: true
tasks:
- name: Prohibit root login
ansible.builtin.lineinfile:
path: /etc/ssh/sshd_config
state: present
regexp: '^PermitRootLogin '
line: 'PermitRootLogin no'
notify:
- Reload ssh daemon
handlers:
- name: Reload ssh daemon
ansible.builtin.service:
name: sshd
state: reloaded
この Ansible Playbook では、次のようなことを行っています。
lineinfile
モジュールで/etc/ssh/sshd_config
の内容を修正するPermitRootLogin
で始まる行が見つからない場合は、ファイルの末尾にPermitRootLogin no
を追加するPermitRootLogin
で始まる行が見つかった場合は、PermitRootLogin no
に置換する(ただし、最初からその設定が記述されていたら何もしない)
service
モジュール で SSH デーモンに設定をリロードさせる
この設定を行うと、root ユーザーでの SSH 接続ができなくなるので注意してください。 必ず、root ユーザー以外で SSH 接続できることを確認してから実行してください。
関連記事
- Ansible タスク例: APT パッケージをインストールする (ansible.builtin.apt)
- Ansible タスク例: UFW でファイアウォールを設定する (community.general.ufw)
- Ansible タスク例: Web からファイルをダウンロードする (ansible.builtin.get_url)
- Ansible タスク例: when による Playbook の条件分岐
- Ansible の SSH 接続で使用するユーザーと秘密鍵を指定する
- Docker コンテナで Ansible のテストベッド環境を用意する
- SSH キーの管理: SSH の接続先ごとにキーを使い分ける (~/.ssh/config)