まくろぐ
更新: / 作成:

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

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

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

$ 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 ユーザーや秘密鍵を定義してしまう方法があります。 次の例では、example.com-maku という名前で、SSH 接続設定を定義しています(この名前は何でもよいですが、ここでは、example.com というホストに maku というユーザー名で接続するという意味でこう付けています)。

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

これで、次のようにするだけで、指定した「ホスト」「ユーザー」「秘密鍵」で SSH 接続することができます。

$ ssh example.com-maku

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

hosts.ini
example.com-maku

関連記事

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