Select Page


Configuration control methods are designed to make controlling huge numbers of servers simple for directors and operations groups. They help you regulate many various methods in an automatic method from one central location.

Whilst there are lots of in style configuration control methods to be had for Linux methods, comparable to Chef and Puppet, those are continuously extra advanced than many of us need or want. Ansible is a brilliant selection to those choices as it calls for a way smaller overhead to get began.

On this information, we can speak about the best way to set up Ansible on an Ubuntu 18.04 server and move over some fundamentals of the best way to use the application.

How Does Ansible Paintings?

Ansible works through configuring consumer machines from a pc that has the Ansible elements put in and configured.

It communicates over customary SSH channels to retrieve knowledge from far off machines, factor instructions, and replica recordsdata. As a result of this, an Ansible machine does no longer require any further application to be put in at the consumer computer systems.

That is a technique that Ansible simplifies the management of servers. Any server that has an SSH port uncovered will also be introduced underneath Ansible’s configuration umbrella, without reference to what degree it’s at in its lifestyles cycle. Which means that any laptop that you’ll be able to administer thru SSH, you’ll be able to additionally administer thru Ansible.

Ansible takes on a modular manner, making it simple to increase to make use of the functionalities of the principle machine to care for explicit eventualities. Modules will also be written in any language and keep in touch in usual JSON.

Configuration recordsdata are basically written within the YAML knowledge serialization layout because of its expressive nature and its similarity to in style markup languages. Ansible can engage with hosts both thru command line gear or its configuration scripts, which can be referred to as Playbooks.

Must haves

To observe this instructional, you are going to want:

  • Two or extra Ubuntu 18.04 servers. Such a shall be used as your Ansible server, whilst the rest shall be used as your Ansible hosts. Every must have a non-root consumer with sudo privileges and a fundamental firewall configured. You’ll set this up through following our Initial Server Setup Guide for Ubuntu 18.04. Please notice that the examples all over this information specify 3 Ansible hosts, however the instructions and configurations proven will also be adjusted for any selection of shoppers.

  • SSH keys generated for the non-root consumer to your Ansible server. To try this, observe Step 1 of our information on How to Set Up SSH Keys on Ubuntu 18.04. For the needs of this instructional, you’ll be able to save the important thing pair to the default location (~/.ssh/id_rsa) and you do not want to password-protect it.

Step 1 — Putting in Ansible

To start the use of Ansible as a method of managing your more than a few servers, you want to put in the Ansible application on a minimum of one mechanical device.

To get the most recent model of Ansible for Ubuntu, you’ll be able to upload the venture’s PPA (non-public package deal archive) for your machine. Prior to doing this, regardless that, you must first replace your package deal index and set up the software-properties-common package deal. This application will aid you set up this and different unbiased application repositories:

  • sudo apt replace
  • sudo apt set up software-properties-common

Then upload the Ansible PPA through typing the next command:

  • sudo apt-add-repository ppa:ansible/ansible

Press ENTER to simply accept the PPA addition.

Subsequent, refresh your machine’s package deal index as soon as once more in order that it’s conscious about the programs to be had within the PPA:

Following this replace, you’ll be able to set up the Ansible application:

Your Ansible server now has the entire application required to manage your hosts.

Step 2 — Configuring SSH Get right of entry to to the Ansible Hosts

As discussed prior to now, Ansible essentially communicates with consumer computer systems thru SSH. Whilst it surely has the facility to deal with password-based SSH authentication, the use of SSH keys can lend a hand to stay issues easy.

In your Ansible server, use the cat command to print the contents of your non-root consumer’s SSH public key record to the terminal’s output:

Replica the ensuing output for your clipboard, then open a brand new terminal and connect with one in every of your Ansible hosts the use of SSH:

  • ssh sammy@ansible_host_ip

Transfer to the buyer mechanical device’s root consumer:

Because the root consumer, open the authorized_keys inside the ~/.ssh listing:

  • nano ~/.ssh/authorized_keys

Within the record, paste your Ansible server consumer’s SSH key, then save the record and shut the editor (press CTRL + X, Y, then ENTER). Then run the go out command to go back to the host’s non-root consumer:

Finally, as a result of Ansible makes use of a python interpreter situated at /usr/bin/python to run its modules, you’ll wish to set up Python 2 at the host to ensure that Ansible to keep in touch with it. Run the next instructions to replace the host’s package deal index and set up the python package deal:

  • sudo apt replace
  • sudo apt set up python

Following this, you’ll be able to run the go out command as soon as once more to near the relationship to the buyer:

Repeat this procedure for each and every server you plan to regulate together with your Ansible server. Subsequent, we’ll configure the Ansible server to connect with those hosts the use of Ansible’s hosts record.

Step 3 — Environment Up Ansible Hosts

Ansible assists in keeping monitor of the entire servers that it is aware of about thru a hosts record. We wish to arrange this record first sooner than we will be able to start to keep in touch with our different computer systems.

Open the record with sudo privileges, like this:

  • sudo nano /and so forth/ansible/hosts

Throughout the record, you are going to see plenty of instance configurations which were commented out (with a # previous each and every line). Those examples received’t in fact paintings for us because the hosts indexed in each and every one are made up. We will be able to, on the other hand, stay those examples within the record to lend a hand us with configuration if we need to put into effect extra advanced eventualities sooner or later.

The hosts record is relatively versatile and will also be configured in a couple of alternative ways. The syntax we’re going to use, regardless that, seems like this:

alias ansible_ssh_host=your_server_ip

On this instance, group_name is an organizational tag that allows you to discuss with any servers indexed underneath it with one phrase, whilst alias is only a identify to refer to 1 explicit server.

So, in our situation, we’re imagining that we’ve got 3 servers we’re going to regulate with Ansible. At this level, those servers are obtainable from the Ansible server through typing:

You must no longer be triggered for a password when you have set this up as it should be. For the aim of demonstration, we can think that our hosts’ IP addresses are,, and We will be able to set this up in order that we will be able to refer to those for my part as host1, host2, and host3, or as a gaggle with the identify servers.

That is the block that we must upload to our hosts record to perform this:

/and so forth/ansible/hosts

host1 ansible_ssh_host=
host2 ansible_ssh_host=
host3 ansible_ssh_host=

Hosts will also be in a couple of teams and teams can configure parameters for all in their participants. Let’s do this out now.

With our present settings, if we attempted to connect with any of those hosts with Ansible, the command would fail (assuming you don’t seem to be running as the foundation consumer). It is because your SSH key’s embedded for the root consumer at the far off methods and Ansible will through default attempt to attach as your present consumer. A connection strive gets this mistake:


host1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true }

At the Ansible server, we are the use of a consumer referred to as sammy. Ansible will check out to connect with each and every host with ssh sammy@server. This won’t paintings if the sammy consumer isn’t at the far off machine as neatly.

We will be able to create a record that tells the entire servers within the “servers” workforce to glue because the root consumer.

To try this, we can create a listing within the Ansible configuration construction referred to as group_vars. Inside this folder, we will be able to create YAML-formatted recordsdata for each and every workforce we need to configure:

  • sudo mkdir /and so forth/ansible/group_vars
  • sudo nano /and so forth/ansible/group_vars/servers

We will be able to put our configuration in right here. YAML recordsdata get started with “—“, so remember to do not disregard that phase.

/and so forth/ansible/group_vars/servers

ansible_ssh_user: root

Save and shut this record when you’re completed.

If you wish to specify configuration main points for each server, without reference to workforce affiliation, you’ll be able to put the ones main points in a record at /and so forth/ansible/group_vars/all. Particular person hosts will also be configured through developing recordsdata named after their alias underneath a listing at /and so forth/ansible/host_vars.

Step 4 — The use of Easy Ansible Instructions

Now that we’ve got our hosts arrange and sufficient configuration main points to permit us to effectively connect with our hosts, we will be able to check out our first actual command.

Ping the entire servers you configured through typing:

Ping output

host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"

host3 | SUCCESS => {
    "changed": false,
    "ping": "pong"

host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"

This can be a fundamental take a look at to ensure that Ansible has a connection to all of its hosts.

The all way all hosts. Shall we simply as simply specify a gaggle:

Shall we additionally specify a person host:

We will be able to specify a couple of hosts through isolating them with colons:

  • ansible -m ping host1:host2

The -m ping portion of the command is an instruction to Ansible to make use of the “ping” module. Those are principally instructions that you’ll be able to run to your far off hosts. The ping module operates in some ways like the traditional ping software in Linux, however as an alternative it exams for Ansible connectivity.

The ping module does not in reality take any arguments, however we will be able to check out any other command to look how that works. We go arguments right into a script through typing -a.

The “shell” module we could us ship a terminal command to the far off host and retrieve the effects. For example, to determine the reminiscence utilization on our host1 mechanical device, shall we use:

  • ansible -m shell -a 'unfastened -m' host1

Shell output

host1 | SUCCESS | rc=0 >>
             general       used       unfastened     shared    buffers     cached
Mem:          3954        227       3726          0         14         93
-/+ buffers/cache:        119       3834
Change:            0          0          0

With that, your Ansible server configured and you’ll be able to effectively keep in touch and regulate your hosts.


On this instructional, we’ve configured Ansible and verified that it will probably keep in touch with each and every host. We’ve extensively utilized the ansible command to execute easy duties remotely.

Even supposing this comes in handy, we’ve no longer lined probably the most tough function of Ansible on this article: Playbooks. Ansible Playbooks are an impressive, easy solution to set up server configurations and multi-machine deployments. For an creation to Playbooks, see this guide. Moreover, we inspire you to take a look at the official Ansible documentation to be informed extra concerning the instrument.