28 January 2026

saltstack salt-ssh automation linux sysadmin

Deploy Salt Minions Across Multiple Servers Using Salt-SSH

Quick one-liner: Install salt-minion on dozens of servers without touching each one — use Salt-SSH to push the package, configure it, and enroll the key remotely.


🤔 Why This Matters

The typical SaltStack setup requires you to install the salt-minion package on every managed node, configure it to point to the master, start the service, and accept the key. Doing this manually across 20+ servers is tedious.

If the target nodes are accessible via SSH, you can automate the entire deployment using Salt-SSH — no pre-installed minion required.


🔧 Step 1: Create the Salt State

On your salt-master, create the state directory:

sudo mkdir -p /srv/salt/deploysalt/conf

Create the state file /srv/salt/deploysalt/init.sls:

install_minion:
  pkg.installed:
    - pkgs:
      - salt-minion

configure_master:
  file.managed:
    - name: /etc/salt/minion
    - source: salt://deploysalt/conf/minion

start_minion:
  service.running:
    - name: salt-minion
    - enable: true

🔧 Step 2: Create the Minion Config

Create /srv/salt/deploysalt/conf/minion:

master: salt-master.fosstech.biz
id: {{ grains['fqdn'] }}

This tells the minion where to find the master and how to identify itself.


🔧 Step 3: Deploy via Salt-SSH

Assuming your target server is 192.168.100.82 with SSH user vagrant (password: vagrant, sudo access):

salt-ssh --roster=scan '192.168.100.82' \
  --user=vagrant \
  --passwd=vagrant \
  --sudo \
  -i state.apply deploysalt

Salt-SSH connects over SSH, installs salt-minion, drops the config file, and starts the service — all in one command.


🔧 Step 4: Accept the Key

Once the minion starts, it sends its key to the master. Accept it:

# List pending keys
sudo salt-key -L

# Accept all pending keys
sudo salt-key -A

# Verify connectivity
sudo salt '*' test.version

You should see:

node01.fosstech.biz:
    3006.0

✅ Deploy to Multiple Servers

Use a roster file to target multiple servers at once. Create /etc/salt/roster:

node01:
  host: 192.168.100.82
  user: vagrant
  passwd: vagrant
  sudo: True

node02:
  host: 192.168.100.83
  user: vagrant
  passwd: vagrant
  sudo: True

Then run:

salt-ssh '*' state.apply deploysalt

All servers get the minion installed, configured, and started in one go.