Zum Inhalt

OpenSSH

Inhalt

  • OpenSSH Portable 10.2p1
  • Ports-Version security/openssh-portable
  • eigener Dienst openssh
  • getrennt vom FreeBSD-Basisdienst sshd
  • Host Keys für rsa, ecdsa und ed25519

Einleitung

Dieses HowTo beschreibt die Installation und Konfiguration von OpenSSH Portable auf FreeBSD 15+.

In diesem HowTo wird bewusst die Ports-Version security/openssh-portable verwendet und nicht ausschließlich das OpenSSH aus dem FreeBSD-Basissystem.


Voraussetzungen

Zu den Voraussetzungen für dieses HowTo siehe bitte: Hosting System


Vorbereitungen

DNS Records

Für dieses HowTo sind in der Regel keine zusätzlichen DNS-Records erforderlich.

Optional sollte der Servername bereits sauber per DNS auflösbar sein, damit SSH-Clients Hostnamen statt IP-Adressen verwenden können.

Text Only
server.example.com.      IN  A       __IPADDR4__
server.example.com.      IN  AAAA    __IPADDR6__

Gruppen / Benutzer / Passwörter

Für dieses HowTo sind keine zusätzlichen Systemgruppen, Systembenutzer oder Passwörter erforderlich.

Verzeichnisse / Dateien

Für dieses HowTo müssen vor der Installation in der Regel keine zusätzlichen Verzeichnisse oder Dateien manuell angelegt werden.

Das Konfigurationsverzeichnis /usr/local/etc/ssh sowie die mitgelieferte Beispieldatei sshd_config.sample werden durch den Port bereitgestellt.


Installation

Wir installieren security/openssh-portable und dessen Abhängigkeiten.

Bash
mkdir -p /var/db/ports/dns_ldns
cat <<'EOF' > /var/db/ports/dns_ldns/options
_OPTIONS_READ=ldns-1.9.0
_FILE_COMPLETE_OPTIONS_LIST=DANETAUSAGE DOXYGEN DRILL EXAMPLES GOST RRTYPEAMTRELAY RRTYPEAVC RRTYPENINFO RRTYPERKEY RRTYPETA
OPTIONS_FILE_SET+=DANETAUSAGE
OPTIONS_FILE_UNSET+=DOXYGEN
OPTIONS_FILE_SET+=DRILL
OPTIONS_FILE_UNSET+=EXAMPLES
OPTIONS_FILE_SET+=GOST
OPTIONS_FILE_UNSET+=RRTYPEAMTRELAY
OPTIONS_FILE_UNSET+=RRTYPEAVC
OPTIONS_FILE_UNSET+=RRTYPENINFO
OPTIONS_FILE_UNSET+=RRTYPERKEY
OPTIONS_FILE_UNSET+=RRTYPETA

EOF

mkdir -p /var/db/ports/security_openssh-portable
cat <<'EOF' > /var/db/ports/security_openssh-portable/options
_OPTIONS_READ=openssh-portable-10.2.p1
_FILE_COMPLETE_OPTIONS_LIST=BLACKLISTD BSM DOCS FIDO_U2F HPN KERB_GSSAPI LDNS LIBEDIT NONECIPHER PAM TCP_WRAPPERS XMSS MIT HEIMDAL HEIMDAL_BASE
OPTIONS_FILE_UNSET+=BLACKLISTD
OPTIONS_FILE_UNSET+=BSM
OPTIONS_FILE_UNSET+=DOCS
OPTIONS_FILE_UNSET+=FIDO_U2F
OPTIONS_FILE_UNSET+=HPN
OPTIONS_FILE_UNSET+=KERB_GSSAPI
OPTIONS_FILE_SET+=LDNS
OPTIONS_FILE_SET+=LIBEDIT
OPTIONS_FILE_UNSET+=NONECIPHER
OPTIONS_FILE_SET+=PAM
OPTIONS_FILE_SET+=TCP_WRAPPERS
OPTIONS_FILE_SET+=XMSS
OPTIONS_FILE_UNSET+=MIT
OPTIONS_FILE_UNSET+=HEIMDAL
OPTIONS_FILE_UNSET+=HEIMDAL_BASE

EOF

portmaster -w -B -g -U --force-config security/openssh-portable -n

Dienst in rc.conf eintragen

Der Ports-Dienst wird mittels sysrc in der rc.conf eingetragen und dadurch beim Systemstart automatisch gestartet.

Wichtig ist hier die saubere Trennung zwischen Ports-OpenSSH und dem OpenSSH aus dem FreeBSD-Basissystem.

Bash
sysrc sshd_enable=NO
sysrc openssh_enable=YES

Konfiguration

Konfigurationsdatei

Die Ports-Version verwendet ihr eigenes Konfigurationsverzeichnis unter /usr/local/etc/ssh. Dort legen wir die Konfigurationsdatei sshd_config ab.

Bash
cat <<'EOF' > /usr/local/etc/ssh/sshd_config
Include sshd_config.d/*.conf

Port 22

PermitRootLogin prohibit-password

PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
KbdInteractiveAuthentication no
UsePAM yes

AllowAgentForwarding no
AllowTcpForwarding no
GatewayPorts no
X11Forwarding no
PermitTunnel no
PermitUserEnvironment no

ClientAliveInterval 60
ClientAliveCountMax 3

PidFile /var/run/opensshd.pid

VersionAddendum none

Subsystem sftp internal-sftp -u 0027

AllowGroups wheel admin sshusers sftponly

# Root bleibt ohne Passwort, aber ohne globales Chroot
Match User root
    PasswordAuthentication no

# Admin- und Shell-Benutzer ohne Passwort-Login
Match Group admin,sshusers
    PasswordAuthentication no

# Reine SFTP-Konten
Match Group sftponly
    ChrootDirectory /home
    ForceCommand internal-sftp -u 0027 -d /%u
    PasswordAuthentication yes
    KbdInteractiveAuthentication no
    PermitTTY no
    DisableForwarding yes
EOF

Host Keys

Falls bereits alte oder unerwünschte Host Keys vorhanden sind, können diese entfernt und anschließend gezielt neu erzeugt werden.

Bash
rm -f /usr/local/etc/ssh/ssh_host_rsa_key /usr/local/etc/ssh/ssh_host_rsa_key.pub
rm -f /usr/local/etc/ssh/ssh_host_ecdsa_key /usr/local/etc/ssh/ssh_host_ecdsa_key.pub
rm -f /usr/local/etc/ssh/ssh_host_ed25519_key /usr/local/etc/ssh/ssh_host_ed25519_key.pub

ssh-keygen -q -t rsa -b 4096 -f "/usr/local/etc/ssh/ssh_host_rsa_key" -N ""
ssh-keygen -l -f "/usr/local/etc/ssh/ssh_host_rsa_key.pub"

ssh-keygen -q -t ecdsa -b 384 -f "/usr/local/etc/ssh/ssh_host_ecdsa_key" -N ""
ssh-keygen -l -f "/usr/local/etc/ssh/ssh_host_ecdsa_key.pub"

ssh-keygen -q -t ed25519 -f "/usr/local/etc/ssh/ssh_host_ed25519_key" -N ""
ssh-keygen -l -f "/usr/local/etc/ssh/ssh_host_ed25519_key.pub"

Konfiguration prüfen

Vor dem ersten Start sollte die Konfiguration immer geprüft werden.

Bash
service openssh configtest
/usr/local/sbin/sshd -t

Datenbanken

Für dieses HowTo sind keine Datenbanken erforderlich.


Zusatzsoftware

Für dieses HowTo ist keine zusätzliche Software erforderlich.


Aufräumen

Überflüssige oder temporäre Verzeichnisse und Dateien entsorgen.

Zusatzsoftware Installation

Nicht erforderlich.

Zusatzsoftware Konfiguration

Nicht erforderlich.


Abschluss

OpenSSH kann nun gestartet werden.

Bash
service openssh start

Für spätere Änderungen:

Bash
service openssh reload
service openssh restart

Referenzen