SSH‑How‑To: macOS ⇆ Server/Weitere Rechner

—– 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 „PASTE
DEINPUBLICKEY“ >> ~/.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/sshd
config
sudo sed -i ’s/^#\?PermitRootLogin ./PermitRootLogin no/‘ /etc/ssh/sshdconfig
sudo sed -i ’s/^#\?PasswordAuthentication .
/PasswordAuthentication no/‘ /etc/ssh/sshd
config

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 meinserver statt langer Befehle. Mit IdentitiesOnly yes stellst 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/config IdentitiesOnly yes setzen + IdentityFile angeben.
  • 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 yes und

  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_keys ergä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