Inhaltsverzeichnis
Secure Shell (SSH)
Standard:
- https://datatracker.ietf.org/doc/html/rfc4251 – (SSH) Protocol Architecture
- https://datatracker.ietf.org/doc/html/rfc4253 – (SSH) Transport Layer Protocol
- https://datatracker.ietf.org/doc/html/rfc4252 – (SSH) Authentication Protocol
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:
- Berechtigungen für Verzeichnis und Dateien richtig gesetzt?
- Richtiger Username (nicht root, sondern Benutzername des jeweiligen Nutzers)?
- 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