2 minutes
M1 MacでUTM上の仮想マシンにAnsible接続するまで
実行環境
ホストOS
- M1 MacBook Pro
- UTM Version 2.4.0 (39)
- ansible [core 2.11.6]
- python version = 3.10.0
- 以下のページにある通りの環境構築を実施済み。
M1ProのMacBookProの環境構築してみた
ゲストOS
- debian
事前準備
①UTMでdebianの起動
最新のisoイメージを取得し、起動する。
起動時のポイントは以下の通り。
- 最小構成でのインストールを行う。
- デバイスのブートシーケンスが正しく設定されていること。
- ネットワーク設定にてポートフォワーディング設定がされていること。
Ansible接続のための設定
Ansible接続のための設定は大きく2つに分けられる。
①ゲストOS側の設定
ansibleを利用するユーザに対して、sudo権限を付与する。 今回はsudoをインストールした後に、sudoグループに所属させることで対応する。
apt install sudo
usermod -G sudo <ユーザ名>
②ホストOS側の設定
ホストOS側でansibleのインストールを行う。 また、ssh接続をパスワード認証で行う際に必要なsshpassもインストールする。
brew install ansible
brew install hudochenkov/sshpass/sshpass
標準のbrew installでは、セキュリティ上の理由でsshpassのインストールは不可なので、注意が必要。
$ brew search sshpass
==> Formulae
sshfs
If you meant "sshpass" specifically:
We won't add sshpass because it makes it too easy for novice SSH users to
ruin SSH's security.
疎通確認
以下の通りにファイルを準備の上、疎通確認を行う。
$ tree
.
├── create-user.yml
├── inventory
│ └── inventory.ini
└── user-list-var.yml
1 directory, 3 files
- inventory/inventory.ini
[test_servers]
localhost
[all:vars]
ansible_ssh_port=22
ansible_ssh_user=<ユーザ名>
ansible_ssh_pass=<パスワード>
ansible_sudo_pass=<パスワード>
- user-list-var.yml
users:
- { name: 'user01', uid: 1001, group: 'users', password: "{{ 'passw0rd'|password_hash('sha512') }}", update_password: 'on_create', comment: 'user01' }
- { name: 'user02', uid: 1002, group: 'users', password: "{{ 'passw0rd'|password_hash('sha512') }}", update_password: 'on_create', comment: 'user02' }
- create-user.yml
---
- hosts: test_servers
become: yes
vars_files:
- user-list-var.yml
tasks:
- name: Create user
user:
#state: absent #ユーザを削除するときはコメントアウトを外す
name: "{{ item.name }}"
password: "{{ item.password }}"
groups: "{{ item.group }}"
shell: /bin/bash
with_items:
- "{{ users }}"
when: users #usersが1件以上の場合のみ実行
- 実行コマンド
$ ansible-playbook -i inventory/inventory.ini create-user.yml
PLAY [test_servers] *********************************************************************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [Create user] **********************************************************************************************************************************************************************************************************
changed: [localhost] => (item={'name': 'user01', 'uid': 1001, 'group': 'users', 'password': '$6$oj3f1KTT7Z5Hi9mQ$TtC.4AwBr5d01JnG3NGdsh1fmYQ1O.KwdbaK3O9XvihCgHDGNjIOqdt9Qy5oByS6ulgRoOuFGL0QbTWgtBJHi0', 'update_password': 'on_create', 'comment': 'user01'})
changed: [localhost] => (item={'name': 'user02', 'uid': 1002, 'group': 'users', 'password': '$6$EYZVfBxffVAO52AW$lGRs3YG4rJILq5thz8VlS/s6kU0wBT8xoL7DO51Qc1UlGx6RxavmcAjXrCIerGKMSOTt3DhwTV/pvifEJJLIK1', 'update_password': 'on_create', 'comment': 'user02'})
PLAY RECAP ******************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- 実行結果
user01, user02というユーザが作成されていれば成功。