Zum Inhalt

SSH

Polycrate bietet native SSH-Integration für schnellen Zugriff auf Hosts aus dem Ansible-Inventory. Diese Integration ermöglicht direkten SSH-Zugriff ohne manuelle Konfiguration.

Voraussetzungen

Die SSH-Integration funktioniert nur, wenn ein inventory.yml im Workspace vorhanden ist. Polycrate ermittelt automatisch:

  • SSH-Host-Adresse (ansible_host)
  • SSH-Port (ansible_ssh_port, default: 22)
  • SSH-User (ansible_user)
  • SSH-Schlüssel aus dem Workspace

Verfügbare Hosts anzeigen

Um alle verfügbaren Hosts im Workspace anzuzeigen:

polycrate ssh list

Ausgabe:

Available SSH hosts:
- web-1 (192.168.1.10)
- web-2 (192.168.1.11)
- db-1 (192.168.1.20)

SSH-Verbindung herstellen

Mit Hostname

Um eine SSH-Verbindung zu einem bestimmten Host herzustellen:

polycrate ssh <hostname>

Beispiel:

polycrate ssh web-1

Interaktive Host-Auswahl

Wenn kein Hostname angegeben wird, zeigt Polycrate eine interaktive Auswahl aller verfügbaren Hosts:

polycrate ssh

Ausgabe:

? Select a host to connect to:
  👉 web-1 (ubuntu@192.168.1.10:22)
     web-2 (ubuntu@192.168.1.11:22)
     db-1 (postgres@192.168.1.20:2222)

--------- Host Details ----------
Name:   web-1
Host:   192.168.1.10
User:   ubuntu

  • Mit Pfeiltasten durch die Hosts navigieren
  • Mit Enter die Verbindung herstellen
  • Mit Ctrl+C abbrechen

Schnelle Navigation

Die interaktive Auswahl zeigt bis zu 10 Hosts gleichzeitig an. Bei vielen Hosts können Sie mit den Pfeiltasten scrollen.

Tab-Completion

Polycrate unterstützt Shell-Autocompletion für den SSH-Befehl. Mit Tab werden alle verfügbaren Hosts angezeigt:

polycrate ssh <TAB>
# Zeigt: web-1  web-2  db-1

Siehe Shell-Autocompletion für die Einrichtung.

Polycrate: 1. Liest das Ansible-Inventory 2. Ermittelt automatisch die Verbindungsinformationen 3. Nutzt den SSH-Schlüssel aus dem Workspace (id_rsa) 4. Stellt die direkte SSH-Verbindung her

Beispiel-Workflow

1. Inventory erstellen

# inventory.yml im Workspace
all:
  hosts:
    web-1:
      ansible_host: 192.168.1.10
      ansible_user: ubuntu
      ansible_ssh_port: 22

    web-2:
      ansible_host: 192.168.1.11
      ansible_user: ubuntu

    db-1:
      ansible_host: 192.168.1.20
      ansible_user: postgres
      ansible_ssh_port: 2222

2. Verfügbare Hosts anzeigen

polycrate ssh list

3. Verbindung herstellen

polycrate ssh web-1

Verwendung

Direkter Zugriff für Debugging

# SSH zu Host
polycrate ssh web-1

# Befehl auf Host ausführen (interaktive Sitzung)
polycrate ssh web-1
# Dann im SSH-Terminal:
$ sudo systemctl status nginx
$ tail -f /var/log/application.log

Nach Ansible-Deployment

# 1. Server mit Ansible konfigurieren
polycrate run webservers configure

# 2. SSH für manuelle Checks
polycrate ssh web-1

# 3. Logs prüfen, Service neu starten, etc.

Shell-Autocompletion

Polycrate unterstützt Tab-Completion für alle Commands, einschließlich dynamischer Host-Completion für polycrate ssh.

Zsh

# Einmalig aktivieren
source <(polycrate completion zsh)

# Permanent in ~/.zshrc
echo 'source <(polycrate completion zsh)' >> ~/.zshrc

Bash

# Einmalig aktivieren
source <(polycrate completion bash)

# Permanent in ~/.bashrc
echo 'source <(polycrate completion bash)' >> ~/.bashrc

Fish

polycrate completion fish > ~/.config/fish/completions/polycrate.fish

Nach der Aktivierung:

polycrate ssh <TAB>
# Zeigt alle verfügbaren Hosts aus dem Inventory

polycrate ssh web<TAB>
# Vervollständigt zu passenden Hosts (z.B. web-1, web-2)

Workspace erforderlich

Die Host-Completion funktioniert nur in einem gültigen Polycrate-Workspace mit inventory.yml.

SSH Passphrase Support

Polycrate unterstützt SSH-Keys mit Passphrase über einen integrierten ssh-agent.

Aktivierung

# Beim Workspace-Init
polycrate --ssh-use-passphrase workspace init

# Bei Action-Ausführung
polycrate --ssh-use-passphrase run my-block deploy

# Für alle Commands
polycrate --ssh-use-passphrase ssh web-1

Passphrase-Quellen (Priorität)

Priorität Quelle Beschreibung
1 ssh-passphrase.poly Datei im Workspace-Root
2 Interaktiver Prompt Manuelle Eingabe

ssh-passphrase.poly:

# Passphrase in Datei speichern (optional)
echo "meine-passphrase" > ssh-passphrase.poly

# Berechtigungen setzen
chmod 600 ssh-passphrase.poly

Sicherheitshinweis

Die Datei ssh-passphrase.poly sollte niemals in Git committet werden! Bei verschlüsselten Workspaces können Sie die Passphrase in artifacts/secrets/ssh-passphrase.poly speichern.

Funktionsweise

  1. ssh-agent Start: Polycrate startet automatisch einen ssh-agent
  2. Key laden: Der SSH-Key wird mit der Passphrase geladen
  3. Socket-Mount: Der Agent-Socket wird in Docker-Container gemountet
  4. Ansible-Integration: Ansible nutzt automatisch den Agent
graph LR
    Polycrate[Polycrate CLI] -->|1. Agent starten| Agent[ssh-agent]
    Polycrate -->|2. Key laden| Agent
    Agent -->|3. Socket| Container[Docker Container]
    Container -->|4. SSH-Auth| Ansible[Ansible]
    Ansible -->|5. Verbinden| Host[Remote Host]

Troubleshooting

"Permission denied (publickey)":

# Prüfen ob Agent läuft
ssh-add -l

# Key manuell zum Agent hinzufügen
ssh-add artifacts/secrets/id_rsa

# Dann erneut versuchen
polycrate --ssh-use-passphrase run my-block deploy

"Agent refused connection":

# Agent-Socket prüfen
echo $SSH_AUTH_SOCK

# Polycrate mit neuem Agent starten
polycrate --ssh-use-passphrase run my-block deploy

Hinweise

  • SSH-Schlüssel: Polycrate nutzt automatisch id_rsa aus dem Workspace-Root oder artifacts/secrets/id_rsa
  • Port: Standard ist Port 22, kann aber per ansible_ssh_port im Inventory überschrieben werden
  • User: Wird aus ansible_user im Inventory gelesen (Standard: root)

Schneller Zugriff

Mit polycrate ssh (interaktive Auswahl) oder polycrate ssh <TAB> (Autocompletion) haben Sie blitzschnellen Zugriff auf alle Server!