まくろぐ
更新:
作成:

Ansible コマンド(ansibleansible-playbook)でマネージドノードを制御するとき、デフォルトでは SSH ユーザーとしてコントロールノードのカレントユーザーが使用されます。 異なる SSH ユーザー(と秘密鍵)で接続したい場合は、コマンドライン引数やインベントリファイルで指定することができます。

コマンドライン引数で SSH ユーザーを指定する方法

ansible-playbook コマンドの、-u (--user) オプションと --private-key オプションで、SSH 接続に使用するユーザー名と秘密鍵を指定することができます。

$ ansible-playbook -i hosts.ini site.yml -u maku --private-key ~/.ssh/maku/id_rsa

インベントリファイルで SSH ユーザーを指定する方法

インベントリファイルで指定する場合は、ansible_user 変数と ansible_ssh_private_key 変数を使います。

hosts.ini(ホストごとに指定する場合)
[servers]
www1.example.com ansible_user=maku ansible_ssh_private_key_file=~/.ssh/maku/id_rsa
www2.example.com ansible_user=maku ansible_ssh_private_key_file=~/.ssh/maku/id_rsa
hosts.ini(グループ単位で指定する場合)
[servers]
www1.example.com
www2.example.com

[servers:vars]
ansible_user=maku
ansible_ssh_private_key_file=~/.ssh/maku/id_rsa

YAML 形式でインベントリファイルを記述する場合も、同様の変数で設定できます。

hosts.yml
all:
  hosts:
    www1.example.com:
    www2.example.com:
  vars:
    ansible_user: maku
    ansible_ssh_private_key_file: ~/.ssh/maku/id_rsa

~/.ssh/config で接続先ごとにユーザーを指定する方法

インベントリファイルに SSH のユーザー名や秘密鍵のパスを記述するのが煩わしいときは、SSH クライアントの設定ファイル (~/.ssh/config) で、接続先ごとに使用する SSH ユーザーや秘密鍵を定義してしまう方法があります。 次の例では、maku-example.com という名前で、SSH 接続設定を定義しています。

~/.ssh/config
Host maku-example.com
    Hostname example.com
    User maku
    Port 22
    IdentityFile ~/ssh/maku/id_rsa

これで、次のようにするだけで、自動的にユーザー maku、およびその秘密鍵を使って SSH 接続されるようになります。

$ ssh maku-example.com

この設定は、内部で ssh を使用しているプロダクトにも有効なので、Ansible のインベントリファイルは次のようにシンプルに記述できるようになります。

hosts.ini
maku-example.com

関連記事

まくろぐ
サイトマップまくへのメッセージ