Ansibleでユーザーとssh鍵を指定する方法

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_useransible_ssh_private_keyを利用します。

[bastion]
"ホスト名"

[bastion:vars]
ansible_user=root
ansible_ssh_private_key_file="./test_key"

以上です。