Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Was fehlt?

Es liegt in der Natur der Sache: Ein Wiki ist niemals fertig. Wir geben uns große Mühe, mit der Entwicklung Schritt zu halten; lassen Supportanfragen direkt in neue Artikel einfließen … aber auch wir sind nicht perfekt. Wenn du hier nicht fündig wirst: Nicht schmollen - Bescheid sagen! Unter hallo@uberspace.de steht dir unser Team gerne bereit. Hand drauf!

system:ssh

SSH-Zugang

Das Herzstück deines Uberspaces ist die Linux-Shell, die du über eine verschlüsselte SSH-Verbindung erreichst. Um dich auf deinen Uberspace einzuloggen benötigst du auf deinem Computer einen Client, also ein Programm mit dessen Hilfe die Verbindung aufgebaut werden kann.

Liebe zur Kommandozeile entdecken

Wir sehen ein, dass es für unerfahrene Nutzer eine gewisse Einstiegshürde beim Thema Terminal und SSH gibt. Aber lass dir gesagt sein - das ist alles gar nicht so schwer wie du vielleicht denken magst. Und ist es nicht auch so, dass man an seinen Aufgaben wächst? Mal ins kalte Wasser springen muss? Über den Tellerrand hinausschauen sollte? Aber genug der Phrasen: Wenn du einen Einstieg ins Thema Shell brauchst, schau doch mal im Wiki von ubuntuusers vorbei.

Und wenn es doch noch irgendwo klemmt - kein Problem. Wir helfen dir gerne über Hürden, wenn du über welche stolperst.

Zugangsdaten

Die Daten die du für den Login und somit für den Aufbau der SSH-Verbindung benötigst sind Username, Hostname und Passwort.

Wenn du den SSH-Zugang mittels Passwort wählst, bieten wir dir zusätzlich die Möglichkeit mittels Zwei-Faktor-Authentifizierung abzusichern.

Zeitgemäße Verschlüsselung

Wir betreiben seit einer Weile zwei OpenSSH-Dienste unterschiedlicher Version und Konfiguration:

  • Der eine ist deutlich neuer und unterstützt nur zeitgemäße Verschlüsselungsmethoden. Du erreichst ihn auf dem normalen SSH-Port 22.
  • Der andere SSH-Dienst unterstützt noch ältere Verschlüsselungsmethoden, die mittlerweile als schwach gelten. Dieser Dienst ist nur eine Übergangslösung, wir würden ihn lieber abschalten und werden das auch demnächst tun, weil es die Sicherheit des ganzen Servers runterzieht. Du erreichst ihn auf Port 4022.

Auf die Hintergründe gehen wir in unserem Blog ein.

Wenn Du von Deinem SSH-Programm Fehlermeldungen bekommst wie „Algorithm negotiation failed“ oder „Client and server could not agree on a common cipher“ oder „Unable to negotiate a key exchange method“ oder dergleichen, kannst Du es mal auf Port 4022 versuchen. Sei Dir dabei aber bewusst, dass Du dann veraltete Verschlüsselung benutzt, die unter Umständen gebrochen werden kann, und dass Du eine Übergangslösung nutzt die irgendwann mal abgeschaltet werden muss. Such Dir lieber einen zeitgemäßen SSH-Client oder dringe darauf, dass Dein SSH-Client dahingehend verbessert wird.

Windows

Unter Windows wird am häufigsten der Client PuTTY verwendet den man sich hier herunterladen und anschließend installieren kann.

Login

Nach dem Starten des Client gibst du im Feld „Hostname“ den Namen des Hosts an, auf dem dein Uberspace liegt (z.B. amnesia.uberspace.de) und wählst den Button „SSH“ an. Durch klicken auf „Open“ wird die Verbindung hergestellt. Im neuen Fenster (deiner Konsole) musst du dich jetzt durch Angabe von Username und Passwort anmelden. So könnte das aussehen:

Hier wirst Du beim ersten Login aufgefordert den Fingerprint des Hosts (in diesem Fall amnesia.uberspace.de) durch Klicken auf Ja oder Yes zu bestätigen. Bitte schau auf deinem Datenblatt (Login erforderlich) nach; wir zeigen dir dort an, welche Fingerprints korrekt sind. Bekommst du einen anderen Fingerprint angezeigt, wende dich bitte an uns, damit wir das klären können. Bestätigst du den Fingerprint, wird dieser nun in der Konfiguration von PuTTY dauerhaft hinterlegt.

Bitte beachte in Bezug auf die Eingabeaufforderung für das SSH-Passwort, dass jenes beim Tippen nicht angezeigt wird. Bitte gib es einfach „blind“ ein und bestätige es mit Enter.

Login mit SSH-Schlüssel

Für Windows gibt es hier eine gute Anleitung wo detailliert erklärt wird wie du einen SSH-Schlüssel erzeugst und diesen in PuTTY einbindest. Die an Punkt 5 vorgeschlagenen 1024 bits sind zwar inzwischen schon per default 2048, sollten aber ruhig noch ein weiteres Mal verdoppelt werden.

Verwende am besten keine DSA- oder ECDSA-Schlüssel, DSA-Verfahren haben inhärente Schwächen und den Elliptischen Kurven die für ECDSA verwendet werden sollte nicht allzuviel Vertrauen geschenkt werden.

Bei RSA-Schlüsseln verwende wenn möglich mindestens eine Schlüssellänge von 4096 Bit.

Linux / OS X

Unter Linux und OS X nutzt man hierzu einfach ein Terminal. Unter Linux wirst du schon selbst wissen, wie du das findest 8-) Unter OS X geht das am einfachsten über die Spotlight-Suchfunktion.

Login

Unter Linux und OS X erfolgt der Login über die Kommandozeile des Terminals wie folgt:

ssh <uberspaceuser>@<uberspacehost>.uberspace.de

Hier ein Beispiel. Der Username des Uberspaces ist hier susi und der Uberspace liegt auf amnesia.uberspace.de:

[Du@DeinSystem ~]$ ssh susi@amnesia.uberspace.de
The authenticity of host 'amnesia.uberspace.de (82.98.87.96)' can't be established.
RSA key fingerprint is ea:7b:7f:97:4c:5d:04:b7:8d:36:04:aa:c4:88:9c:a8.
Are you sure you want to continue connecting (yes/no)? 

Beim ersten Login kennt dein Client den Host bzw. das System an dem du dich anmelden möchtest noch nicht und zeigt dir aus Sicherheitsgründen den Fingerprint des öffentlichen Schlüssels an. Der Fingerprint des Hosts, auf dem dein Uberspace liegt, wird dir auf deinem Datenblatt (Login erforderlich) angezeigt.

Du wirst nun aufgefordert diesen Fingerprint durch Eingabe von „yes“ zu bestätigen (natürlich nur, wenn er mit dem Fingerprint aus dem Datenblatt übereinstimmt!), wodurch dieser in deinem Client (hier in der Datei .ssh/known_hosts) dauerhaft hinterlegt wird. Bei der anschließenden Passwortabfrage beachte bitte, dass das Passwort beim Tippen nicht angezeigt wird. Bitte gib es einfach „blind“ ein und bestätige es mit Enter. Hier das ganze noch einmal:

[Du@DeinSystem ~]$ ssh susi@amnesia.uberspace.de
The authenticity of host 'amnesia.uberspace.de (82.98.87.96)' can't be established.
RSA key fingerprint is ea:7b:7f:97:4c:5d:04:b7:8d:36:04:aa:c4:88:9c:a8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'amnesia.uberspace.de,82.98.87.96' (RSA) to the list of known hosts.
susi@amnesia.uberspace.de's password: 
[susi@amnesia ~]$

Schon bist du eingeloggt! Da sich dieser Fingerprint auf dem Host nicht ändern wird, kann dein Client bei der nächsten Verbindung die du aufbaust den neu übermittelten Fingerprint mit dem von dir bereits bestätigten abgleichen. Stimmen diese überein erfolgt nun keine weitere Sicherheitsabfrage:

[Du@DeinSystem ~]$ ssh susi@amnesia.uberspace.de
susi@amnesia.uberspace.de's password: 
[susi@amnesia ~]$

Login mit SSH-Schlüssel

Du kannst den Zugang zu deinem Uberspace auch so einrichten das du dich mit einem SSH-Schlüssel einloggst anstelle bei jedem Login User und Passwort zu übergeben. Hierzu musst du erst einmal ein Schlüsselpaar auf deinem Rechner erzeugen und dann den Öffentlichen Schlüssel auf deinem Uberspace hinterlegen.

Unter Linux und OS X erzeugt man den Schlüssel mittels Befehl ssh-keygen. Hier ein Beispiel unter Linux wobei keine Passphrase verwendet wurde sondern bei der Frage einfach ein „Enter“ erfolgte (Du solltest aber eine Passphrase verwenden):

[boni@my.system.tld ~]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/boni/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/boni/.ssh/id_rsa.
Your public key has been saved in /home/boni/.ssh/id_rsa.pub.
The key fingerprint is:
2a:d7:13:11:01:b3:22:73:55:33:33:21:aa:12:01:1b boni@my.system.tld

Das neu generierte Schlüsselpaar liegt jetzt im Verzeichnis /home/<user>/.ssh/ (Linux) bzw. /Users/<user>/.ssh/ (OS X). Der öffentliche Schlüssel wird in der Datei id_rsa.pub und der private Schlüssel in der Datei id_rsa abgelegt. Öffne einfach die Datei id_rsa.pub und kopiere die Zeile „ssh-rsa AAA……ganz..viele..Zeichen“ und füge sie auf deinem Uberspace in die Datei .ssh/authorized_keys hinzu. Die Datei authorized_keys im Verzeichnis .ssh/ besteht auf deinem Uberspace auch schon. Jetzt speichere die Datei ab, logge dich aus und logge dich wieder ein. Du solltest jetzt keine User- und Passwortabfrage erhalten sondern direkt eingeloggt sein.

Alternativ kannst du den öffentlichen Schlüssel auch bequem über dein Dashboard einpflegen in dem du diesen unter „SSH-Zugang zum Uberspace“ → „..via SSH-Schlüssel“ einträgst. Hier kannst du einen nicht mehr benötigten Schlüssel auch einfach wieder entfernen oder auch einen zweiten, dritten,… Schlüssel hinzufügen

Verwende am besten keine DSA- oder ECDSA-Schlüssel, DSA-Verfahren haben inhärente Schwächen und den Elliptischen Kurven die für ECDSA verwendet werden sollte nicht allzuviel Vertrauen geschenkt werden.

Bei RSA-Schlüsseln verwende wenn möglich mindestens eine Schlüssellänge von 4096 Bit.

Wenn Deine Version von OpenSSH unter Linux mindestens Version 6.5 ist, kannst Du auch schon Ed25519 Schlüssel verwenden, außerdem steht Dir ein neues Dateiformat für verschlüsselte Schlüssel zur Verfügung, das deutlich stärker verschlüsselt als das alte:

[boni@my.system.tld ~]$ ssh-keygen -t rsa -b 4096 -o -a 100[boni@my.system.tld ~]$ ssh-keygen -t ed25519 -o -a 100

Zwei-Faktor-Authentifizierung

Auch wenn wir empfehlen, Public Keys zu nutzen, so wissen wir, dass nicht wenige User dennoch lieber Passwörter nutzen wollen. Dabei forcieren wir zwar schon eine gewisse Mindeststärke; es geht aber auch noch sicherer, nämlich mit Zwei-Faktor-Authentifizierung, die du optional mit deinem Account benutzen kannst.

Wir haben das ganze über den Google Authenticator realisiert, der Zwei-Faktor-Authentifizierung gemäß RFC 6238 implementiert. Das Token besteht aus einer 6-stelligen Zahl, die zusätzlich zu Benutzernamen und Passwort zur Autorisierung genutzt wird. Da diese Zahl alle 30 Sekunden neu generiert wird, nennt man das ganze Time-Based One-Time Password und die Apps, welche zur Authentifizierung genutzt werden, OTP-Apps.

Google ist lediglich der Herausgeber der Software. Weder ist ein Google-Account Voraussetzung für die Nutzung, noch werden irgendwelche Daten an Google übertragen.
Zwei-Faktor-Authentifizierung ist mit SFTP nicht kompatibel. Über SFTP lässt sich der Sicherheits-Token nicht eingeben und gängige SFTP-Clients quittieren dies mit einem fehlgeschlagenen Login.

Und so funktioniert's:

OTP-App installieren

Hier hast du die Qual der Wahl, das Programm muss lediglich RFC 6238 unterstützen.

Beispiele für Android:

Beispiele für iOS:

Beispiele für Windows Phone:

Es gibt auch Implementierungen in Java, für OS X, Linux, Windows, undsoweiter. Zwei-Faktor-Authentifizierung solltest du allerdings über zwei verschiedene Geräte nutzen (also am besten auf deinem Handy oder Tablet, das Gerät was du immer dabei hast), sonst ist der Sicherheitsgewinn futsch.

Account initialisieren

Melde dich dann per SSH an deinem Uberspace an, und gib dort den Befehl google-authenticator ein.

Nun passiert folgendes:

  • Es wird ein geheimer Schlüssel für dich generiert, der dir als QR-Code dargestellt wird. Den kannst du einfach mit deiner OTP-App abfotografieren, mehr musst du an dieser Stelle nicht tun. Einfach, oder?
  • Außerdem fünf „scratch codes“ (also Codes, die nur ein mal gültig sind), mit denen du dich einloggen kannst, wenn dir dein Handy oder die App mal abhanden kommen sollte. Mit den Codes allein kann niemand etwas anfangen. Ein Angreifer müsste zunächst wissen, für welchen Account sie überhaupt gedacht sind, und er müsste zusätzlich ja immer noch dein SSH-Passwort kennen.
Druck diese Codes aus (oder schreibe sie ab, lerne sie auswendig, tätowiere sie dir, …) und bewahre sie an einen Ort auf, wo du sie wieder findest!

und du kannst einige Konfigurationseinstellungen vornehmen. So sieht das aus:

[elise@amnesia ~]$ google-authenticator 

Die erste Frage solltest du mit y beantworten.

Do you want authentication tokens to be time-based (y/n) y

Es folgt der QR-Code und die scratch codes.

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/elise@amnesia.uberspace.de%3Fsecret%3DXXXXXXXXXXXXXXXX

[... riesiger QR-Code ...]
[... riesiger QR-Code ...]
[... riesiger QR-Code ...]
[... riesiger QR-Code ...]
[... riesiger QR-Code ...]
[... riesiger QR-Code ...]
[... riesiger QR-Code ...]

Your new secret key is: XXXXXXXXXXXXXXXX
Your verification code is 111111
Your emergency scratch codes are:
  11111111
  22222222
  33333333
  44444444
  55555555

Auch die folgende Frage solltest du mit y beantworten.

Do you want me to update your "~/.google_authenticator" file (y/n) y

Die nächste Frage kannst du ebenfalls mit y beantworten; sie verringert wie beschrieben das Risiko von Man-in-the-middle-Attacken.

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

Die dritte Frage kannst du mit n beantworten, weil sowohl dein Handy (via GSM) als auch unsere Hosts (via NTP) korrekte Uhrzeiten haben sollten.

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n

Die letzte Frage kannst du ebenfalls mit n beantworten, denn wir haben bereits unsererseits iptables-Regeln gegen SSH-Scan-Versuche.

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) n

Testen und benutzen

Wenn du dich nun per SSH einloggst, wirst du zusätzlich zum Passwort noch nach einem Verification Code gefragt - das ist entsprechend der achtstellige Code, den dir dein Smartphone alle 30 Sekunden wechselnd anzeigt, oder eben einer der Scratch Codes, wenn dein Smartphone nicht verfügbar sein sollte. So sieht das aus:

[someuser@somehost ~]$ ssh elise@amnesia.uberspace.de
Verification code: 
Password: 
Last login: ...

Zwei-Faktor-Authentifizierung abstellen

Möchtest du die Zwei-Faktor-Authentifizierung nicht mehr nutzen? Kein Problem. Logge dich einfach per SSH ein (das muss noch mit einem dynamischen generierten Code oder einem von deiner Notfall-Liste passieren), und lösche dann die betreffende Konfigurationsdatei:

[elise@amnesia ~]$ rm -f ~/.google_authenticator

Das war's schon - ab sofort reicht dann wieder ein Passwort für den Login aus.

Wenn du aus irgendwelchen Gründen keinen Zugriff auf deine Scratchcodes hast (weil du sie z.B. nicht notiert hast, obwohl wir dich eingängig darum bitten) und dein Telefon gestohlen wurde oder das Zeitliche gesegnet hat, gibt es noch die Möglichkeit, per SSH-Key Zugriff auf die Shell zu bekommen und dann die ~/.google_authenticator-Datei zu löschen.

Zugang mit Kennwort sperren

Wenn du den SSH-Zugang mit Keys eingerichtet hast und eine Authentifizierung über Passwort sperren möchtest, ist das kein Problem. Schick uns einfach eine Mail mit deinem Usernamen und wir übernehmen das für dich. Technisch gesehen führen wir ein usermod -L $USER aus, was ein ! vor dein Kennwort in unserer /etc/shadow-Datei schreibt.

Was dann nicht mehr geht:

  • Der Zugang zu den Mails deines Systemusers benötigt das SSH-Kennwort, du kannst also darüber keine Mails mehr versenden und empfangen. Du kannst dir aber einfach ein Postfach anlegen und das Problem damit umgehen.
  • Auch der Webalizer (dessen URL du in deinem Dashboard findest) benötigt zur Authentifizierung dein SSH-Kennwort. Auch hier gibt es einen Workaround - installiere dir doch einfach eine eigene Instanz von Webalizer oder z.B. Piwik.

Du kannst das ganze übrigens rückgängig machen, in dem du dir über dein Dashboard ein neues SSH-Kennwort vergibst.

authorized_keys2

Ab und zu kommen Fragen auf, was es mit der ~/.ssh/authorized_keys2-Datei auf sich hat und warum diese Datei nicht löschbar ist. Die Antwort ist einfach - das Dashboard kommuniziert mit deinem Uberspace per SSH mit dem Schlüssel, der dort eingetragen ist.

Wir haben diese Datei vor einer Weile hinzugefügt und für die User unveränderbar gemacht, weil immer wieder User unseren Key aus der authorized_keys entfernt haben (trotz Hinweis, dass das unser Key ist und der nicht gelöscht werden sollte) und daraufhin dann das Webinterface nicht funktionierte.

Uberspace Host Manifest

Falls du mehrere Uberspaces betreibst und nicht jeden Host einzeln in deine known_hosts übertragen möchtest, dann kannst du das Uberspace Host Manifest herunterladen. Wir haben es mit einer OpenPGP-Signatur versehen, so dass du es auf Korrektheit prüfen und anschließend übernehmen kannst.

Führe dazu folgendes auf deinem Arbeitsrechner aus:

Achtung: die Datei hosts im aktuellen Arbeitsverzeichnis wird dabei durch den ersten curl-Aufruf überschrieben!

[elise@amnesia ~]$ curl -O https://uberspace.de/hosts
[elise@amnesia ~]$ curl -O https://uberspace.de/hosts.asc
[elise@amnesia ~]$ gpg < hosts.asc
[elise@amnesia ~]$ cat hosts >> $HOME/.ssh/known_hosts

Wenn neue Uberspace Hosts angelegt werden, fügen wir sie unten an und signieren die Liste neu.

system/ssh.txt · Zuletzt geändert: 2016/03/23 12:44 von uber