Linux9 ansible1. アジェンダ
0900-0910 今日できるようになる事、自己紹介
環境構築
0910-0915 Ansibleとは
0915-0925 Ansibleのインストール
0925-0950 Playbook、インベントリ
0950-1000 新規サーバーの環境構築
1000-1020 公開鍵認証
1020-1030 チェックと実行
シナリオ
新しいラボができた。
そこで新しいサーバーを使ってラボのテストを行うことにしたのだ
が、そのラボでは他のラボでインストールしたモジュールなどを利用
しているので、まっさらなサーバーではテストができない。
すべてのサーバーで一つ一つコマンドを打ってインストールするの
は面倒なので、Ansibleを使って自動化することにした。
メモ
持ち物:PC×人数分、LAN線×人数分、新規サーバー×人数分
サーバー×人数分
【Linux】#9 Ansible
1
2. 2
1 2 3 4
PC 192.168.210.11 192.168.210.12 192.168.210.13 192.168.210.14
【コントロールノード】
CentOS 8
192.168.210.111 192.168.210.112 192.168.210.113 192.168.210.114
【ターゲットノード】
CentOS 8
192.168.210.121 192.168.210.122 192.168.210.123 192.168.210.124
構成図
Server1
192.168.210.111
Server2
192.168.210.112
Server3
192.168.210.113
Server4
192.168.210.114
New Server3
192.168.210.123
New Server1
192.168.210.121
New Server4
192.168.210.124
New Server2
192.168.210.122
PC1
192.168.210.11
PC2
192.168.210.12
PC3
192.168.210.13
PC4
192.168.210.14
#1
コントロールノード ターゲットノード
3. 3
1 2 3 4
PC 192.168.210.11 192.168.210.12 192.168.210.13 192.168.210.14
【コントロールノード】
CentOS 8
192.168.210.111 192.168.210.112 192.168.210.113 192.168.210.114
【ターゲットノード】
CentOS 8
192.168.210.121 192.168.210.122 192.168.210.123 192.168.210.124
構成図
Ansible
Ansible管理ホスト
(コントロールノード)
192.168.210.111
Playbook
インベン
トリ
被管理ホスト
(ターゲットノード)
192.168.210.121
192.168.210.131
192.168.210.141
Ansible
Ansible管理ホスト
(コントロールノード)
192.168.210.112
Playbook
インベン
トリ
被管理ホスト
(ターゲットノード)
192.168.210.122
192.168.210.132
192.168.210.142
4. ファイル関連図
4
$ vi␣/etc/ansible/ansible.cfg
[defaults]
inventory = /etc/ansible/hosts
remote_port = 54321
$ vi␣/etc/ansible/hosts
[newServer]
192.168.210.121 ansible_user=root
192.168.210.131 ansible_user=root
192.168.210.141 ansible_user=root
メイン設定ファイル
インベントリ
paybook(YAML形式)
LAMP_Create.yml or NewServer.yml の名前設計が良い
---
- name: install something
hosts: newServer
vars:
ansible_become: yes
ansible_become_method: sudo
tasks:
- name: Install Vsftpd
yum:
name: vsftpd
state: latest
- name: Install Ftp
yum:
name: ftp
state: latest
- name: Install Chrony
yum:
name: chrony
state: latest
- name: Install Httpd
yum:
name: httpd
state: latest
- name: Install Php
yum:
name: php
state: latest
- name: Install Mariadb-server
yum:
name: mariadb-server
state: latest
- name: Install Php-mysqlnd
yum:
name: php-mysqlnd
state: latest
6. 手順4 nmtuiを起動する
Linuxで以下のコマンドを打ち、NetworkManagerを起動
※矢印キーでカーソル移動
※Enterで決定
手順5 IPアドレス、デフォゲ、DNSを設定
>「Edit a Connection」を選択してEnter
>「ensxx」を選択してEnter
それぞれ、以下のように設定
Address:192.168.210.xx
Gateway:192.168.210.254
DNS:8.8.8.8
>下までいき「OK」を押し、設定を終える
手順6 接続を有効化する
>「Activate a connection」を選択
>「*ensxx」となっていることを確認、なっていなければ<Activate>でEnter
><Back>でEnter、下までいき「OK」でEnter、nmtuiを終了
>TeraTermで接続する(ユーザ名:root パスワード:P@ssw0rd)
環境設定
6
$nmtui
7. インターネット未接続環境でのdnf
ソフトウェアのインストールにはCentOS8のパッケージ管理ソフトウェアである「dnf」を使用していきますが、
デフォルトではインターネットからソフトウェアを取得することになります。
ここではインストールメディアからソフトウェアを取得する設定を行います。
インストールメディアのISOイメージをCDROMドライブにセットしてあります。
7
$ mkdir /media/CentOS
$ mount –o ro /dev/cdrom /media/CentOS/
$ alias dnf=‘dnf --disablerepo=¥* --enablerepo=c8-media-BaseOS,c8-media-AppStream’
$ df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
devtmpfs 905304 0 905304 0% /dev
tmpfs 934792 0 934792 0% /dev/shm
tmpfs 934792 9832 924960 2% /run
tmpfs 934792 0 934792 0% /sys/fs/cgroup
/dev/mapper/cl-root 13420544 4243772 9176772 32% /
/dev/sda2 999320 191708 738800 21% /boot
/dev/sda1 613184 6908 606276 2% /boot/efi
tmpfs 186956 1180 185776 1% /run/user/42
tmpfs 186956 4672 182284 3% /run/user/0
/dev/sr0 8037456 8037456 0 100% /media/CentOS
$ alias
alias cp='cp -i'
alias dnf=‘dnf --disablerepo=¥* --enablerepo=c8-media-BaseOS,c8-media-
AppStream’ ←確認
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias␣dnf=‘dnf␣--disablerepo=¥*␣--enablerepo=media-baseos,media-appstream'
設定ファイルは cat␣/etc/yum.repos.d/CentOS-Stream-Media.repo
11. Ansible Playbookを書いてみる
手順13 viを立ち上げる
手順14 Playbookを書く
各インデントにはタブキーなどを使わず、
スペース2個でインデントを表記すること
に注意してください
※⾧いので2段組みにしてますが、
左に続いて右側も記述してください
11
$vi install.yml
---
- name: install something
hosts: newServer
vars:
ansible_become: yes
ansible_become_method: sudo
tasks:
- name: Install Vsftpd
yum:
name: vsftpd
state: latest
- name: Install Ftp
yum:
name: ftp
state: latest
- name: Install Chrony
yum:
name: chrony
state: latest
- name: Install Httpd
yum:
name: httpd
state: latest
- name: Install Php
yum:
name: php
state: latest
- name: Install Mariadb-server
yum:
name: mariadb-server
state: latest
- name: Install Php-mysqlnd
yum:
name: php-mysqlnd
state: latest
install.yml
14. Ansible 新規サーバーの環境設定
手順17 Chromeでvmwareを開き、ターゲットノードを起動する
>サーバーの名前が Linux9-1【ansible】 となっているものを選んでください。(9-xは座席番号です。)
手順18 コントロールノードとターゲットノードで疎通できることを確認
座席番号1の方→192.168.210.111 2の方→192.168.210.112
3の方→192.168.210.111 4の方→192.168.210.114
手順19 鍵を受け取るファイルを作成する
手順20 中身に何も入っていないことを確認
手順21 TeraTerm(コントロールノード)に戻ります。
14
$ping 192.168.210.11x
$ mkdir ~/.ssh
$ touch ~/.ssh/authorized_keys
$ cat ~/.ssh/authorized_keys
15. Ansible 新規サーバーの環境設定
手順22 鍵をつくる
以下のコマンドで公開鍵と秘密鍵を作成します。
手順23 鍵が作られたことを確認します。
id_rsa(秘密鍵)id_rsa.pub(公開鍵)が作られていることを確認します。
手順24 公開鍵の送信
以下のコマンドで公開鍵をターゲットノードに送ります
15
$ssh-keygen
Enter file in which to save the key (/root/.ssh/id_rsa):(Enter)
Enter passphrase (empty for no passphrase):(Enter)
Enter same passphrase again:(Enter)
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:JivX/abNy6mwNIAHHlISvkMFALQmP6NcU2pYoSJKxJw
root@forse
The key's randomart image is:
+----[RSA 3072]----+
|B+=+o |
|.Eo+. |
|+=+.o. |
|Boo+o+ |
|..*=o + S |
|..o+.. * . |
|.. . o = . |
| o . + =.. |
| . o+B. |
+-----[SHA256]-----+
$ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.210.12x
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed:
...(省略)...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
...(省略)...
root@192.168.210.xx's password:(P@ssw0rd を入力)
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.210.12x'"
and check to make sure that only the key(s) you wanted were added.
# ls ~/.ssh
authorized_keys id_rsa id_rsa.pub known_hosts
16. Ansible 新規サーバーの環境設定
手順25 公開鍵認証を確認
通常SSHログインをする際にはパスワードが要求されますが
正しく公開鍵、秘密鍵が置かれていると要求なしでログイン
することができます。
手順26 実際に公開鍵が置かれていることを確認する
手順27 確認したら、新規サーバーから抜けます
16
$ ssh root@192.168.210.12x
Last login: Sun May 16 14:10:36 2021 from 192.168.210.2
$cat ~/.ssh/authorized_keys
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABgQDJnd/FVsj0PTNL3C8q
L0Hsm0T2nnXh/ZRoKgFue9a24tbjbEUZECEz4uw/TSCngxrYB
mwTe/p7qJPYQuU/
(…省略…)=root@forse
SSHコマンドを打ったユーザであることを確認
$exit
logout
Connection to 192.168.56.12x closed.
18. Ansible テスト実行
Ansibleには文法チェックの他に、テスト実行のオプション、checkが用意されています。
checkでは、実際にどういった挙動が起きるのかを確認することができます。
ここでは実際の実行結果が出力されますが、ターゲットノードには反映されていないので注意です。
手順29 テスト実行
PLAY RECAPを見て、全てokになっていることを確認
18
$ansible-playbook -i hosts install.yml --private-key="~/.ssh/id_rsa" --check
PLAY [install something] *******************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.210.12x]
(中略)
PLAY RECAP *********************************************************************
192.168.210.12x : ok=8 changed=7 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
19. Ansible 本番
ここまでクリアしていれば、あとは実行するだけです。
手順30 本番実行
PLAY RECAPを見て、全てokになっていることを確認
手順31 確認
新規サーバーで正しく各種コンフィグがインストール、アップデートできているかを確認しましょう。
今回インストールしたもの:(1)vsdtpd (2)ftp (3)httpd (4)php (5)mariadb-server (6)php-mysqlnd (7)chrony
確認するためのコマンド→ など
19
$ansible-playbook -i hosts install.yml --private-key="~/.ssh/id_rsa"
PLAY [install something] *******************************************************
TASK [Gathering Facts] *********************************************************
(中略)
PLAY RECAP *********************************************************************
192.168.210.12x : ok=8 changed=7 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$rpm -qa | grep httpd
21. 時間が余ったら
手順34 Ansibleを実行する
手順35 アンインストールされていることを確認する
>手順31と違うことを確認
ここまででおわりです、おつかれさまでした!
21
$ansible-playbook -i hosts install.yml --private-key="~/.ssh/id_rsa"
$ ssh root@192.168.210.12x
Last login: Sat May 29 12:30:22 2021 from 192.168.210.12x
$ rpm -qa | grep http など
$