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:
Ausgabe:
SSH-Verbindung herstellen¶
Mit Hostname¶
Um eine SSH-Verbindung zu einem bestimmten Host herzustellen:
Beispiel:
Interaktive Host-Auswahl¶
Wenn kein Hostname angegeben wird, zeigt Polycrate eine interaktive Auswahl aller verfügbaren Hosts:
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:
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¶
3. Verbindung herstellen¶
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¶
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¶
- ssh-agent Start: Polycrate startet automatisch einen ssh-agent
- Key laden: Der SSH-Key wird mit der Passphrase geladen
- Socket-Mount: Der Agent-Socket wird in Docker-Container gemountet
- 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_rsaaus dem Workspace-Root oderartifacts/secrets/id_rsa - Port: Standard ist Port 22, kann aber per
ansible_ssh_portim Inventory überschrieben werden - User: Wird aus
ansible_userim Inventory gelesen (Standard:root)
Schneller Zugriff
Mit polycrate ssh (interaktive Auswahl) oder polycrate ssh <TAB> (Autocompletion) haben Sie blitzschnellen Zugriff auf alle Server!