Inhaltsverzeichnis

Secure Shell (SSH)

Standard:

SSH-Client

Private Key-Pair generieren

$ ssh-keygen -t rsa

id_rsa(private key) in ~/.ssh speichern

Passphrase für Private Key ändern

$ ssh-keygen -p -f ~/.ssh/id_rsa

Permissions

:!: Achtung: Permissions müssen restriktiv gesetzt sein (700) für ./ssh Verzeichnis und (600) für die darin enthaltenen Keys!

$ chmod 700 .ssh && chmod 600 .ssh/*

Verbindung mit Tunnel für VNC herstellen

Portforwarding, z.B. für eine VNC-Verbindung:

$ ssh -L 5920:localhost:5920 user@example.com

Socks-Proxy um Remote zu surfen:

$ ssh -N -D2000 user@example.com
 # Im Browser muss noch der Port 2000 als Socks-Proxy angegeben werden.

Forward local:4567 port via remote Port:8080

ssh -R *:8080:localhost:4567

SSH-Server

Den generierten Public Key id_rsa.public in ~/.ssh/authorized_keys einfügen

:!: Achtung: Permissions müssen restriktiv gesetzt sein (700) für ./ssh Verzeichnis und (600) für die darin enthaltenen Keys!

 chmod 700 ~/.ssh && chmod 600 ~/.ssh/*

Danach muss ggf. in /etc/ssh/sshd_config der entsprechende Nutzernamen im Abschnitt AllowUsers oder der Gruppenname in AllowGroups eintragen und der ssh-Daemon neu gestartet werden.

Troubleshooting:

  1. Berechtigungen für Verzeichnis und Dateien richtig gesetzt?
  2. Richtiger Username (nicht root, sondern Benutzername des jeweiligen Nutzers)?
  3. Public Key muss als 1 Zeile in ~/.ssh/authorized_keys eingefügt sein, evtl. vorhandene Zeilenumbrüche entfernen!

Alternativ: ssh-copy-id

Funktioniert z.B. vom existierenden FreeBSD-Server zu einem neu aufgesetzten Linux-System mit Passwort-Authentisierung

$ ssh-copy-id -i ~/.ssh/authorized_keys user@example.com

SSH-Demon konfigurieren:

$ vim /etc/ssh/sshd_config
$ man sshd_config

Passwort Authentisierung ausschalten:

#PasswordAuthentication yes

ändern zu:

PasswordAuthentication no

Überprüfen der Syntax vor dem Start des SSH-Demons:

$ sshd -t

Firewall Konfiguration (iptables)

-A INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -m recent --set --name sshattack --rsource
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -m recent --rcheck --seconds 300 --hitcount 3 --name sshattack --rsource -j LOG --log-prefix "SSH Drop: "
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -m recent --rcheck --seconds 300 --hitcount 3 --name sshattack --rsource -j REJECT --reject-with tcp-reset
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT