—– macOS: Schlüssel erzeugen —–
ssh-keygen -t ed25519 -a 100 -C „testuser01@mac“
Optional: RSA (nur falls Ed25519 nicht möglich)
ssh-keygen -t rsa -b 4096 -o -a 100 -C „testuser01@mac“
Schlüssel in Agent + Schlüsselbund laden (macOS)
mkdir -p ~/.ssh && chmod 700 ~/.ssh
cat >> ~/.ssh/config <<'CFG'
Host
AddKeysToAgent yes
UseKeychain yes
ServerAliveInterval 30
ServerAliveCountMax 3
CFG
ssh-add –apple-use-keychain ~/.ssh/ided25519
Public Key in Zwischenablage
pbcopy < ~/.ssh/ided25519.pub
—– Public Key zum Server kopieren —–
Komfortabel (falls vorhanden): brew install ssh-copy-id
ssh-copy-id -i ~/.ssh/ided25519.pub testuserle@1.2.3.4
Manuell (auf dem Server nach Passwort-Login 1x):
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo „PASTEDEINPUBLICKEY“ >> ~/.ssh/authorizedkeys && chmod 600 ~/.ssh/authorizedkeys
—– macOS: Host in ~/.ssh/config eintragen —–
cat >> ~/.ssh/config <<'CFG'
Host meinserver
HostName 1.2.3.4
User test user
Port 2222
IdentityFile ~/.ssh/ided25519
IdentitiesOnly yes
CFG
Verbindung testen (verbose)
ssh -vvv meinserver
Datei übertragen (Beispiel)
scp ./build.zip meinserver:/var/www/
—– Server-Härtung (Beispiel Debian/Ubuntu) —–
Root-Rechte nötig; Konfig sichern & anpassen
sudo cp /etc/ssh/sshdconfig /etc/ssh/sshdconfig.bak
sudo sed -i ’s/^#\?Port ./Port 2222/‘ /etc/ssh/sshdconfig
sudo sed -i ’s/^#\?PermitRootLogin ./PermitRootLogin no/‘ /etc/ssh/sshdconfig
sudo sed -i ’s/^#\?PasswordAuthentication ./PasswordAuthentication no/‘ /etc/ssh/sshdconfig
Konfig prüfen & SSH neu laden
sudo sshd -t && (sudo systemctl reload ssh || sudo systemctl restart ssh)
Firewall (UFW)
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status
Fail2Ban installieren & aktivieren
sudo apt update && sudo apt install -y fail2ban
sudo bash -c ‚cat > /etc/fail2ban/jail.local <<JAIL\n[sshd]\nenabled = true\nport = 2222\nmaxretry = 5\nbantime = 1h\nfindtime = 15m\nJAIL'
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
Von macOS aus Port prüfen
nc -vz 1.2.3.4 2222
---
## 1) Auf dem Mac: SSH‑Schlüssel erzeugen
**Empfohlen:** Ed25519 (kompakt & sicher)
```bash
ssh-keygen -t ed25519 -a 100 -C "testuser01@macbook"
- Speicherort:
~/.ssh/ided25519(ENTER lassen) - Setze eine starke Passphrase (nutzt der
ssh-agent)
Fallback nur bei Bedarf:
ssh-keygen -t rsa -b 4096 -o -a 100 -C "testuser01@macbook"
Agent/Keychain nutzen (Komfort):
# In ~/.ssh/config global setzen:
AddKeysToAgent yes
UseKeychain yes
# Schlüssel laden (macOS):
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Public Key kopieren:
pbcopy < ~/.ssh/id_ed25519.pub
2) Public Key auf den Zielrechner bringen
Variante A – ssh-copy-id (Homebrew: brew install ssh-copy-id)
ssh-copy-id -i ~/.ssh/id_ed25519.pub testuserle@1.2.3.4
Variante B – manuell (auf dem Server):
mkdir -p ~/.ssh && chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys # Public Key (eine Zeile) einfügen
chmod 600 ~/.ssh/authorized_keys
3) Komfort mit ~/.ssh/config (macOS)
Beispiele:
Host meinserver
HostName 1.2.3.4
User testuserle
Port 2222
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
AddKeysToAgent yes
UseKeychain yes
# Bastion / ProxyJump
Host bastion
HostName bastion.example.com
User testuserle
IdentityFile ~/.ssh/id_ed25519
Host intern-*
ProxyJump bastion
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Vorteil:
ssh meinserverstatt langer Befehle. MitIdentitiesOnly yesstellst du sicher, dass nur der angegebene Key benutzt wird.
4) Verbinden, testen & Dateien kopieren
Standard:
ssh meinserver
Ohne config (explizit Key/Port):
ssh -i ~/.ssh/id_ed25519 -p 2222 testuserle@1.2.3.4
Debug:
ssh -vvv meinserver
Dateien:
# Download
scp meinserver:/etc/hosts ~/Downloads/
# Upload
scp ./build.zip meinserver:/var/www/
5) Server härten (SSH‑Daemon)
Beispiel: Debian/Ubuntu. Für RHEL/CentOS Firewalld + SELinux Hinweise siehe unten.
Wesentliche Optionen in /etc/ssh/sshdconfig:
Port 2222
Protocol 2
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
PermitEmptyPasswords no
X11Forwarding no
AllowTcpForwarding yes
ClientAliveInterval 300
ClientAliveCountMax 2
# Optional: nur bestimmte Benutzer erlauben
# AllowUsers testuserle deploy
Danach prüfen & neu laden:
sudo sshd -t
sudo systemctl reload ssh || sudo systemctl restart ssh
Firewall:
- UFW (Ubuntu/Debian):
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status
- Firewalld (RHEL/CentOS/Alma):
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
- SELinux (RHEL/CentOS) – SSH‑Port registrieren:
sudo semanage port -a -t ssh_port_t -p tcp 2222 || \
sudo semanage port -m -t ssh_port_t -p tcp 2222
sudo systemctl reload sshd
Fail2Ban (gegen Bruteforce):
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo nano /etc/fail2ban/jail.local
Minimal:
[sshd]
enabled = true
port = 2222
maxretry = 5
bantime = 1h
findtime = 15m
Dann:
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
6) Typische Stolpersteine & Checks
- Rechte:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
- Falscher Key gewählt: in
~/.ssh/configIdentitiesOnly yessetzen +IdentityFileangeben. - Neuer Port erreichbar?
nc -vz your.server.tld 2222
- Host‑Key geändert (Server neu installiert):
ssh-keygen -R your.server.tld
ssh-keygen -R 1.2.3.4
- Agent lädt Key nicht automatisch (macOS):
AddKeysToAgent yes,UseKeychain yesund
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
7) Bonus: SFTP nur mit Schlüssel
SFTP läuft über SSH. Wenn PasswordAuthentication no, dann nur Schlüssellogin – sicher & bequem:
sftp meinserver
# get / put / ls / cd
8) Key‑Rotation & Backup
- Rotation: neuen Key erstellen → auf allen Hosts in
authorized_keysergänzen → alten Key erst danach entfernen. - Backup: Private Keys nie unverschlüsselt lagern (verschlüsselte Volumes/Passwort‑Manager/Keychain).
- Mehrere Geräte: pro Gerät eigener Key (Kommentar hilft bei Zuordnung).
9) Mini‑Cheatsheet
# Key erzeugen
ssh-keygen -t ed25519 -a 100 -C "testuser01@mac"
# Key in Agent + Schlüsselbund
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
# Public Key kopieren
pbcopy < ~/.ssh/id_ed25519.pub
# Einloggen (mit config)
ssh meinserver
# Ohne config (Key + Port)
ssh -i ~/.ssh/id_ed25519 -p 2222 testuser@1.2.3.4
# Datei hochladen
scp ./app.tar.gz meinserver:/opt/apps/
# Debug
ssh -vvv meinserver