Ansibleからサーバーに対して鍵認証でPlaybookを実行する場合、特定のユーザー名やssh鍵が必要です。例えば、AnsibleからAWSのAPI経由でEC2インスタンスを作成する場合、その後のサーバー設定作業はデフォルトのユーザ名や指定したssh鍵を利用する必要があります。本記事では、前述した要件が満たせるように、Ansibleでユーザ名とssh鍵を指定する方法について紹介します。
- 環境
- 事前作業
- 引数で指定する
- インベントリファイルで指定する
なお、公式ドキュメントではこちらで紹介されています。
環境
本記事では、以下の環境で実施しました。
サーバー:RHEL7.6
クライアント: MacOS 10.15
Ansible:2.10.5 ( python version = 3.9.1 )
事前作業
鍵認証に必要なssh鍵を生成し、サーバーとクライアントに配置します。
ssh鍵を生成する
以下のコマンドで、公開鍵と秘密鍵を生成します。パスフレーズを求められますが、今回はパスフレーズを設定しないので、Enterキーのみで設定します。
$ ssh-keygen -t rsa -f test_key
生成すると、秘密鍵のtest_key
と公開鍵のtest_key.pub
ファイルが生成されます。
サーバーに鍵を配置する
scpコマンドでサーバーに鍵を転送します。
$ scp ./test_key.pub root@[ホスト名]:~/.ssh/
デフォルトでauthorized_keysを確認する仕様なので、authorized_keysに鍵を登録します。
$ ssh root@[ホスト名]
→パスワードを入力
$ chmod 700 ~/.ssh
$ cat ~/.ssh/test_rsa.pub >> authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ rm ~/.ssh/test_rsa.pub
デフォルトで鍵認証が許可されていない場合は、sshの設定ファイルを編集する必要があります。今回はrootログインを利用するので、PermitRootLogin
も設定しています。
$ vi /etc/ssh/sshd_config
→以下の行をコメントアウトして保存します。
#RSAAuthentication yes
#AuthorizedKeyFile .ssh/authorized_keys
#PermitRootLogin yes
sshdサービスを起動します。
$ service sshd restart
鍵認証でログインできることを確認する
秘密鍵を指定してログインできることが確認できたらサーバー側の設定が完了です。
$ ssh -i ./test_key root@[ホスト名]
引数で指定する
AnsibleのPlaybook実行時に引数で指定する場合は、以下のように-u
と--private-key
オプションを利用します。
$ ansible-playbook -i [インベントリファイル名] [Playbookファイル名] -u root --private-key="./test_key"
インベントリファイルで指定する
インベントリファイルで指定する場合は、以下のようにansible_user
とansible_ssh_private_key
を利用します。
[bastion]
"ホスト名"
[bastion:vars]
ansible_user=root
ansible_ssh_private_key_file="./test_key"
以上です。