Im Kapitel Firewall aktivieren hat der Name ssh den Standardport 22 freigegeben. Dieses UFW-Profil folgt einer Portänderung nicht automatisch. Deshalb müssen wir den neuen Port ausdrücklich freigeben, bevor wir SSH neu starten.
SSH Regeln in UFW überprüfen
Rufen wir zur Sicherheit die aktuellen Firewall Regeln ab:
__$ sudo ufw status verbose
Ausgabe:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
Wir geben zunächst den neuen Port in der Firewall frei und lassen die bestehende SSH-Verbindung geöffnet:
__$ sudo ufw allow 22123/tcp
SSH-Port ändern
Erst ändern wir den Standardport 22 vom SSH-Dienst. Öffnen wir dazu die SSH-Konfigurationsdatei:
__$ sudo nano /etc/ssh/sshd_config
Die Option Port kommentieren wir ein und stellen den Wert auf 22123:
Auszug aus /etc/ssh/sshd_config
...
Port 22123
...
Die folgende vollständige Datei dient nur zur Orientierung. Standardwerte und Kommentare können sich zwischen OpenSSH-Versionen unterscheiden; ersetze deine gesamte Datei deshalb nicht durch dieses Beispiel. Für diesen Schritt müssen nur die oben gezeigten relevanten Direktiven geändert werden.
/etc/ssh/sshd_config
# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
Include /etc/ssh/sshd_config.d/*.conf
Port 22123
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# Logging
#SyslogFacility AUTH
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile %h/.ssh/authorized_keys
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
Vor dem Neustart prüfen wir die Konfiguration. Ubuntu 24.04 verwendet für OpenSSH standardmäßig die Socket-Aktivierung von systemd. Deshalb erfordert ein geänderter Port zusätzlich ein daemon-reload:
__$ sudo sshd -t
__$ sudo systemctl daemon-reload
__$ sudo systemctl restart ssh.service
Lass die aktuelle Verbindung geöffnet und teste zuerst in einem zweiten Fenster eine Verbindung über Port 22123. Erst wenn sie funktioniert, löschen wir die alte Firewallregel:
__$ sudo ufw delete allow ssh
Schauen wir uns die Regelliste nochmal an:
__$ sudo ufw status
Ausgabe:
Status: active
To Action From
-- ------ ----
22123/tcp ALLOW IN Anywhere
22123/tcp (v6) ALLOW IN Anywhere (v6)
Wie die einzelnen Regeln gelöscht werden, kann unter ufw nachgeschlagen werden.
Ab jetzt müssen wir bei der Anmeldung den neuen Port mitgeben.
Unter Windows mit PuTTY
In PuTTY stellen wir dazu den Port um. Bestenfalls laden wir unsere Session, ändern den Port und speichern die Session auch wieder ab:
Unter Windows mit Cygwin
Bei Cygwin ergänzen wir den Parameter -p und die Portnummer:
__$ ssh tom@116.203.69.89 -p 22123 -i /cygdrive/d/linux-server/keys/private-key
Unter Mac und Linux im Terminal
Wir ergänzen den Parameter -p und die Portnummer. Der vollständige SSH-Befehl sieht im Terminal dann so aus:
__$ ssh tom@116.203.69.89 -p 22123 -i ~/linux-server/id_rsa