Ansible コマンド(ansible
や ansible-playbook
)でマネージドノードを制御するとき、デフォルトでは SSH ユーザーとしてコントロールノードのカレントユーザーが使用されます。
異なる SSH ユーザー(と秘密鍵)で接続したい場合は、コマンドライン引数やインベントリファイルで指定することができます。
- コマンドライン引数で指定する方法
- インベントリファイルで指定する方法
ansible.cfg
でデフォルトユーザーを指定する方法~/.ssh/config
で接続先ごとにユーザーを指定する方法
コマンドライン引数で 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
変数を使います。
YAML 形式でインベントリファイルを記述する場合も、同様の変数で設定できます。
~/.ssh/config で接続先ごとにユーザーを指定する方法
インベントリファイルに SSH のユーザー名や秘密鍵のパスを記述するのが煩わしいときは、SSH クライアントの設定ファイル (~/.ssh/config
) で、接続先ごとに使用する SSH ユーザーや秘密鍵を定義してしまう方法があります。
次の例では、example.com-maku
という名前で、SSH 接続設定を定義しています(この名前は何でもよいですが、ここでは、example.com
というホストに maku
というユーザー名で接続するという意味でこう付けています)。
これで、次のようにするだけで、指定した「ホスト」「ユーザー」「秘密鍵」で SSH 接続することができます。
$ ssh example.com-maku
この設定は、内部で SSH を使用しているプロダクトにも有効なので、Ansible のインベントリファイルは次のようにシンプルに記述できるようになります。