Knowledge Base

Docs : ssh-config-export

→ Overview

SSH Config Export

RackPeek can generate a ready-to-use ~/.ssh/config file from your modeled infrastructure.

That means:

  • No manually editing SSH config
  • No memorizing IP addresses
  • Just ssh vm-name and go
  • RackPeek stays your single source of truth

Works natively on macOS and Linux.


1. Make a Resource SSH-Ready

A resource will be included in the SSH export if it has an address.

At minimum, define one of:

labels:
  ip: 192.168.1.20

or

labels:
  hostname: server01.local

If you already use Ansible:

labels:
  ansible_host: 192.168.1.20

If no address is found, the resource is skipped.


2. Optional SSH Settings

You can control how SSH connects using labels:

labels:
  ip: 192.168.1.20
  ssh_user: ubuntu
  ssh_port: 2222
  ssh_identity_file: ~/.ssh/id_rsa

If ssh_user or ssh_port are missing, RackPeek falls back to:

  • ansible_user
  • ansible_port
  • CLI defaults (if provided)

3. Example Resource

- kind: System
  type: vm
  name: vm-web01
  tags:
    - prod
    - linux
  labels:
    ip: 192.168.1.20
    ssh_user: ubuntu

4. What Gets Generated

Host vm-web01
  HostName 192.168.1.20
  User ubuntu
  IdentityFile ~/.ssh/id_rsa

Now you can connect with:

ssh vm-web01

No IP address needed.


5. Filtering by Tags

You can export only specific systems:

rpk export ssh --include-tags prod

Only resources tagged prod will be included.


6. CLI Example

rpk export ssh \
  --include-tags prod,linux \
  --default-user ubuntu \
  --default-port 22 \
  --default-identity ~/.ssh/id_rsa \
  --output ssh_config

7. Apply the Config

Append to your existing SSH config:

cat ssh_config >> ~/.ssh/config

Or replace it:

mv ssh_config ~/.ssh/config
chmod 600 ~/.ssh/config

Permissions must be 600, or SSH will ignore the file.


8. How Naming Works

By default, each host alias is the resource name:

Host vm-web01

RackPeek automatically:

  • Lowercases names
  • Replaces spaces with -
  • Removes unsupported characters

Example:

vm web 01

Becomes:

vm-web-01

9. Fallback Logic (Simple Version)

RackPeek resolves values in this order:

Address

  1. ip
  2. hostname
  3. ansible_host

User

  1. ssh_user
  2. ansible_user
  3. CLI default

Port

  1. ssh_port
  2. ansible_port
  3. CLI default

Identity

  1. ssh_identity_file
  2. CLI default

10. Best Practices

  • Always define an ip or hostname
  • Prefer ssh_user over reusing unrelated labels
  • Use tags like prod, staging, linux for filtering
  • Keep resource names clean and predictable

11. Example Final Output

Host vm-db01
  HostName 192.168.1.30
  User postgres
  Port 2222
  IdentityFile ~/.ssh/id_rsa

Host vm-web01
  HostName 192.168.1.20
  User ubuntu
  IdentityFile ~/.ssh/id_rsa

And that’s it:

ssh vm-db01
ssh vm-web01

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please reload the page.