SSH

Last change on 2020-07-31 • Created on 2020-03-19 • ID: RO-FFA5F

Einführung

Dieser Artikel über das Remote-Zugriffs-Protokoll SSH unterstützt Sie bei dessen Einrichtung, Konfiguration und Verwendung in Kombination mit Ihren Hetzner Produkten.

Was ist SSH?

SSH ist ein voll verschlüsseltes Protokoll, welches den Fernzugriff auf die Shell von UNIX-basierten Systemen (wie Linux, BSD und MacOS) ermöglicht. Darüber hinaus bietet das Protokoll eine Schlüssel-basierte Authentifizierung, die Möglichkeit für Dateiübertragungen und Tunneling.

Wie erhalte ich einen SSH Server?

Hetzner-Produkte mit SSH-Zugang:

  • eingeschränkter Zugriff
    • Webhosting (zur Verwaltung und Bearbeitung von Web-Dateien und Skripten)
      • Level 9
      • Level 19
    • Storage Boxes (nicht interaktiv, nur für SCP und Rsync)
    • Managed Server (kundenspezifische Software-Installation/Konfiguration und Dateiverwaltung)
  • voller Root-Zugriff
    • dedizierte Root-Server
    • Cloud-Server

Ein SSH-Server ist bereits in unseren Standardimages enthalten, die als automatische Installation über den Robot oder bei Nutzung der anpassbaren Installation über das Installimage-Skript im Rescue-System verfügbar sind. Nach Abschluss der Installation können Sie sich einfach per SSH mit dem installierten System verbinden.

Wenn Sie das Betriebssystem anderweitig selbst installiert haben, müssen Sie ggf. einen SSH-Dienst im System manuell nach-installieren:

Betriebssystem Installation
Debian/Ubuntu apt install openssh-server
CentOS/RHEL yum install openssh-server
SuSE zypper in openssh
Arch Linux pacman -S openssh
Gentoo emerge -av openssh
Windows Microsoft Dokumentation
MacOS systemsetup -setremotelogin on

In bestimmten Fällen muss der Dienst anschließend noch manuell gestartet werden. Wenn Sie eine Firewall verwenden, müssen Sie Port 22 für SSH öffnen.

Wie erhalte ich einen SSH Client?

  • Unter Linux, BSD und MacOS ist ein SSH-Client generell bereits vorinstalliert, kann jedoch bei Bedarf leicht über die jeweilige Paket-Verwaltung nachinstalliert werden.
  • Da Windows keinen integrierten SSH-Client mitliefert, empfehlen wir hier die Installation des Tools PuTTY.
Betriebssystem Installation
Debian/Ubuntu apt install openssh-client
CentOS/RHEL yum install openssh-clients
SuSE zypper in openssh
Arch Linux pacman -S openssh
Gentoo emerge -av openssh
Windows PuTTY von greenend.org.uk
MacOS Über Kommandozeile verfügbar

Wie verwende ich meinen SSH Client, um eine Verbindung zum Server herzustellen?

  • Wenn Sie ein UNIX System (Linux/BSD/MacOS) nutzen, geben Sie bitte folgenden Befehl in Ihr Terminal ein, um eine SSH-Verbindung aufzubauen:

    ssh <user>@<IP_oder_domain>

    Bitte ersetzen Sie dazu <user> mit dem entsprechenden Benutzernamen (in der Regel 'root') und <IP_oder_domain> mit der IP-Adresse oder Domain Ihres Produktes.

  • Wenn Sie Putty verwenden, geben Sie Ihren DNS-Servernamen oder dessen IP-Adresse ein. Wählen Sie (falls notwendig) SSH und Port 22 aus und klicken Sie auf Verbinden. Danach werden Sie zur Eingabe von Benutzername (in der Regel root) und Passwort aufgefordert. Wenn Sie diese korrekt eingegeben haben, werden Sie ins System eingeloggt.

Wie stelle ich sicher, daß ich mich mit dem richtigen Server verbinde?

Beim erstmaligen Verbinden mit einem Server erscheint eine Anzeige, die den Benutzer auffordert den sogenannten Fingerprint (Fingerabdruck) des Servers zu prüfen und zu bestätigen. Der Fingerprint ist ein verkürzte Darstellung des öffentlichen Schlüssels des Servers.

The authenticity of host 'example.com (10.0.0.1)' can't be established.
RSA key fingerprint is SHA256:DlxqI4BctJqAgyCfyExywbm9a7qdL7nqfMKgoQuGp5w..
Are you sure you want to continue connecting (yes/no)?

Je nachdem welcher Schlüssel für die Verbindung verwendet wird, ändert sich die Ausgabe. Neben RSA sind DSA, ECDSA und ED25519 gängige Schlüsseltypen, wobei DSA nicht mehr verwendet werden sollte und ab OpenSSH 7 standardmäßig nicht mehr genutzt wird.

Bei der automatischen Installation via Hetzner Robot werden die Fingerprints angezeigt und zusätzlich per E-Mail übermittelt. Auch bei der Aktivierung des Rescue-Systems werden dessen Fingerprints im Hetzner Robot angezeigt.

Sollte beim erneuten Verbinden folgende Warnung erscheinen, sollte man diese Ernst nehmen:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:DlxqI4BctJqAgyCfyExywbm9a7qdL7nqfMKgoQuGp5w.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /home/user/.ssh/known_hosts:1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle
attacks.
Permission denied (publickey,password).

Diese Warnmeldung wird angezeigt, wenn sich der Fingerabdruck des Ziel-Systems ändert, z.B. beim Booten des Rescue-Systems oder bei der Installation eines neuen Betriebssystems. In diesem Fall entfernen Sie einfach den falschen Fingerabdruck lokal mit folgendem Befehl:

ssh-keygen -R <IP_oder_domain>

Wenn Sie in der Vergangenheit noch keine Verbindung zu einem anderen Betriebssystem unter derselben IP oder Domain hergestellt haben, sollte die Warnung vor einem Man-in-the-Middle-Angriff ernst genommen werden. In einem solchen Fall sollte die Verbindung unterbrochen und eine KVM-Konsole bestellt werden, um die Situation innerhalb des laufenden Systems zu überprüfen.

Wie erzeuge ich einen neuen SSH Host-Key?

Bei der automatischen Installation via Hetzner Robot oder dem Installimage Script im Rescue-System werden in der Regel alle Host-Schlüssel neu generiert. Um in einem installierten System einen Schlüssel auszutauschen, wird ssh-keygen verwendet. Eine Liste aller vorhanden Keys (ssh_host*) findet man unter /etc/ssh/

ls -l /etc/ssh
total 280
-rw-r--r-- 1 root root 242091 Oct  3  2014 moduli
-rw-r--r-- 1 root root   1689 Oct 17  2014 ssh_config
-rw-r--r-- 1 root root   2530 Dec 30 10:51 sshd_config
-rw------- 1 root root    668 Dec 30 10:44 ssh_host_dsa_key
-rw-r--r-- 1 root root    622 Dec 30 10:44 ssh_host_dsa_key.pub
-rw------- 1 root root    227 Dec 30 10:44 ssh_host_ecdsa_key
-rw-r--r-- 1 root root    194 Dec 30 10:44 ssh_host_ecdsa_key.pub
-rw------- 1 root root    432 Dec 30 10:44 ssh_host_ed25519_key
-rw-r--r-- 1 root root    114 Dec 30 10:44 ssh_host_ed25519_key.pub
-rw------- 1 root root   1675 Dec 30 10:44 ssh_host_rsa_key
-rw-r--r-- 1 root root    414 Dec 30 10:44 ssh_host_rsa_key.pub

Um z.b. den ED25519 Key zu erneuern lautet das Kommando:

ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N
Generating public/private ed25519 key pair.
/etc/ssh/ssh_host_ed25519_key already exists.
Overwrite (y/n)? y
Your identification has been saved in /etc/ssh/ssh_host_ed25519_key.
Your public key has been saved in /etc/ssh/ssh_host_ed25519_key.pub.
The key fingerprint is:
d5:1d:28:01:f7:c5:0f:fb:7b:42:07:08:1f:93:1c:c6 root@your_host
The key's randomart image is:
+--[ED25519 256]--+
|        ..o+o=o  |
|         .o+Eoo. |
|          .+o+.+ |
|         .  o o .|
|        S      o |
|               .o|
|              . o|
|               o.|
|                o|
+-----------------+

Wie funktioniert die Dateiübertragung per SSH?

SCP

Das für die Abwicklung einer Dateiübertragung benötigte Protokoll SCP nutzt eine darunter liegende SSH-Verbindung für die vollständig verschlüsselte Authentifizierung und Übertragung des Datenstroms. Daher ist ein SSH-Server auf dem jeweiligen anderen System erforderlich.

SCP kann in Verbindung mit einigen Remote-Dateimanagern, aber auch auf der Linux-, BSD- oder MacOS-Shell verwendet werden. Um eine Dateiübertragung von Ihrem System auf ein anderes oder umgekehrt zu starten, verwenden Sie einfach die folgende Befehlssyntax:

scp <Quelle> <Ziel>

Um eine Datei von System-A nach System-B zu kopieren, während Sie auf System-A angemeldet sind:

scp /pfad/zur/datei holu@System-B:/pfad/zur/ziel-datei

Um eine Datei von System-A nach System-B zu kopieren, während Sie auf System-B angemeldet sind:

scp holu@System-B:/pfad/zur/datei /pfad/zur/ziel-datei

Um den Inhalt eines Ordners (alle Dateien und Unterverzeichnisse) rekursiv zu kopieren, hängen Sie einfach -rp an:

scp -rp holu@System-B:/pfad/zum/ordner/ /pfad/zum/ziel-ordner/

SFTP

Das Protokoll SFTP (Secure File Transfer Protocol) wurde als Alternative zu FTPS (per TLS verschlüsseltes FTP) entwickelt und verwendet im Vergleich dazu nur eine Verbindung, welche über eine verschlüsselte SSH-Verbindung abgewickelt wird. Daher ist wie bei SCP ebenfalls ein SSH-Server erforderlich.

SFTP kann mit einigen Remote-Dateimanagern, aber auch auf der Linux-, BSD- oder MacOS-Shell verwendet werden. Im Vergleich zu SCP müssen Sie hier jedoch die Verbindung zuerst aufbauen:

sftp <benutzername>@<IP_oder_Domain>

Sobald die Verbindung hergestellt ist, wird Ihnen die sftp-Eingabeaufforderung präsentiert, über die Sie mit dem entfernten System interagieren können:

sftp holu@your_host.example.com
Connected to holu@your_host.example.com.
sftp>

Die nutzbaren SFTP-Befehle ähneln denen der Linux-Shell. Wenn Sie den Befehl help oder ? verwenden, wird eine Liste der verfügbaren Befehle angezeigt:

sftp> help
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp grp path                     Change group of file 'path' to 'grp'
chmod mode path                    Change permissions of file 'path' to 'mode'
chown own path                     Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
exit                               Quit sftp
get [-afPpRr] remote [local]       Download file
reget [-fPpRr] remote [local]      Resume download file
reput [-fPpRr] [local] remote      Resume upload file
help                               Display this help text
lcd path                           Change local directory to 'path'
lls [ls-options [path]]            Display local directory listing
lmkdir path                        Create local directory
ln [-s] oldpath newpath            Link remote file (-s for symlink)
lpwd                               Print local working directory
ls [-1afhlnrSt] [path]             Display remote directory listing
lumask umask                       Set local umask to 'umask'
mkdir path                         Create remote directory
progress                           Toggle display of progress meter
put [-afPpRr] local [remote]       Upload file
pwd                                Display remote working directory
quit                               Quit sftp
rename oldpath newpath             Rename remote file
rm path                            Delete remote file
rmdir path                         Remove remote directory
symlink oldpath newpath            Symlink remote file
version                            Show SFTP version
!command                           Execute 'command' in local shell
!                                  Escape to local shell
?                                  Synonym for help

Für mehr Informationen und Beispiele, schauen Sie sich die SFTP-Dokumentation an.

Wie benutze ich SSH um einen Tunnel aufzubauen?

Die Tunneling-Funktion des SSH-Protokolls, welche für die Verschlüsselung eines Datenstroms (wie bei SCP und SFTP) verwendet wird, kann ebenfalls genutzt werden, um eine sichere VPN-ähnliche Verbindung zwischen zwei Systemen herzustellen. Weitere Informationen finden Sie in der SSH-Tunnel-Dokumentation.

Table of Contents