HowTo: SSH und Shell für Einsteiger

Sinepp

Registered User
Inhalt

  1. Vorwort
  2. Quick and Dirty Einstieg für Ungeduldige
    1. Kurzreferenz Shell-Befehle
    2. Übersicht Operatoren / Pipe
    3. Kurzreferenz vi-Befehle
  3. SSH
  4. Die Shell
  5. SSH Sicherheit
  6. Nützliche Tools

Vorwort

Entstanden ist dieses HowTo aus Threads in denen User bzw. Serverbesitzer die Frage gestellt haben: „Was ist eigentlich SSH / die Shell?“ An der Stelle der Appell: Wenn diese grundlegende Frage auftaucht fehlt Grundwissen! Es leuchten bei Serveradministratoren die Alarmlampen mit dem Label „Newbie-Alarm“ auf. Die Frage als solche ist natürlich berechtigt, aber sie sollte nicht von jemanden gestellt werden der sich bereits einen Server gekauft / gemietet hat und nun Probleme im Betrieb feststellt. Nun für Einsteiger, Nachschlager etc. soll das HowTo dienen und wird bei Bedarf erweitert / verändert etc. Das ist hier sozusagen die Version 0.1 und ich hoffe auf zahlreiche Kritik und Verbesserungvorschläge.

Die Quick and Dirty Methode ist genau wie der Name sagt Quick und Dirty, sollte aber ausreichend sein um einen Befehl an seinen Server zu übermitteln.


Quick and Dirty Einstieg für Ungeduldige

Es wurde gesagt „gib den Befehl XYZ in die Shell ein“ und Du hast keine Ahnung bei welchem Pizzaservice Du nun Deine Shell bestellen sollst? Gut. Es gibt unter Linux und Windows zwei Möglichkeiten der Bedienung

a) die grafische Oberfläche
b) die DOS Box bei Windows oder die Shell unter Linux

Um auf die Shell unter Linux zuzugreifen benötigst Du einen SSH Client – ein Programm was eine Verbindung zu Deinem Server herstellt und die Befehle überträgt, die Du an Deinem PC eingibst. Hier gibt es:

- Putty (für Windows)
- SSH (für Linux)

Nach der Installation gibt es nun die Möglichkeit Putty zu starten. Meistens irgendwie über Start  Programme  irgendwas  Putty. Um Dich mit Deinem Server zu verbinden musst Du nun folgende Daten eingeben:

- Hostname (IP Adresse oder deinedomain.de)
- Connection Type = SSH

Anschließend einfach mal auf Open klicken und es sollte ein Fenster aufpoppen, weiße Schrift auf schwarzem Grund mit dem Wort „login:“. Dort gibst Du in der Regel root ein. Das Passwort sollte Dir Dein Provider mitgeteilt haben. Bei erfolgreichem Login solltest Du nun die Möglichkeit haben Kommandos einzugeben.

Jetzt nur noch den Befehl XYZ eingeben und den Anweisungen des Forums folgen. Wenn Du Dich mit dem User root eingeloggt hast, kannst Du alles auf der Maschine anstellen was Du möchtest, also sei vorsichtig und wenn Du Dir nicht sicher bist – lies erstmal nach, was der Befehl macht, den Du da ausführen sollst. Hier ein paar wichtige SSH, besser gesagt Shell-Befehle:



<b>Befehl
Erklärung​
</b>

man BEFEHL
Gibt die Dokumentation zu dem BEFEHL aus, bspw.: „man grep“​
ls
Listet den Inhalt des Verzeichnisses auf, in dem Du Dich gerade befindest. Weiterführende Infos: Gebe den Befehl „man ls“ ein​
rm DATEI
Löscht die DATEI
pwd
Zeigt Dir das Verzeichnis an, in dem Du Dich gerade befindest​
vi DATEI
vi ist ein Editor. Mit vi DATEI wird die DATEI im Editor zum lesen geöffnet.​
„man vi“ wird dringend empfohlen, eine Kurzreferenz zu den wichtigsten Befehlen gibt es im Anschluss an diese Tabelle.​
find / -name BEGRIFF
Durchsucht die Platte ab dem Verzeichnis „/“ nach einer Datei mit dem Namen BEGRIFF. Es kann auch mit 'BEGRI*' gesucht werden.​
ps aux
ps ist ein Befehl, der alle laufenden Prozesse ausgibt, die Argumente „aux“ geben wirklich alle Prozesse aus (siehe „man ps“).​
Operatoren

ls > /root/test.txt
Gibt das was der Befehl ls ausgeben würde in die Datei test.txt im Verzeichnis root aus, überschreibt dabei den Inhalt von test.txt​
ls >> /root/test.txt
Gibt das was der Befehl ls ausgeben würde in die Datei test.txt im Verzeichnis root aus, hängt die Daten an das Dateiende an​
ls | grep test
Das Pipesymbol „|“ wird mit „Alt Gr“ und der „größer/kleiner Taste“ geschrieben. Es verkettet in diesem Beispiel zwei Befehle. In diesem Fall würde der Befehl ls nur die Verzeichnisnamen ausgeben, die das Wort test beinhalten (grep sucht in dem Ergebnis von ls nach Begriffen, die den String „test“ beinhalten). Auf diese Art können beliebig viele Befehle miteinander verkettet werden, der nachfolgende verarbeitet jeweils das Ergebnis des vorherigen...einfach gesagt.​


Kurzferenz zu vi


Befehl
Erklärung


i
Steht für Insert, setzt Dich in den Änderungsmodus. Sorgt dafür, dass Du nach einem „vi DATEI“ die Datei auch ändern kannst​
ESC
Um aus dem Änderungsmodus wieder herauszukommen​
/BEGRIFF
Durchsucht die geöffnete Datei nach dem BEGRIFF.​
:q!
Beendet vi ohne Änderungen abzuspeichern​
:wq!
Beendet vi und speichert die Änderungen​
Es gibt sicherlich noch einige Befehle die interessant sind, allerdings würde das den Rahmen sprengen. Du kannst jetzt nach einer Datei suchen, eine Datei öffnen, diese bearbeiten und speichern sowie schließen usw.

Alternative Editoren: vim, nano oder pico.

SSH

SSH steht für Secure Shell und bietet mittels Verschlüsselung eine Möglichkeit eine abhörsichere Leitung zwischen sich und seinem Server aufzubauen um dort Befehle abzusetzen. Es handelt sich hierbei um eine Client / Server Lösung, d.h. auf dem Host im Internet / bei dem Provider wird ein SSHD(aemon) installiert, der auf eingehende Verbindung auf einem in der sshd.config angegebenem Port lauscht. Standardmäßig ist das 22, daher kommt auch die in Putty voreingestellte Porteingabe 22, wenn man als Connection Type ssh auswählt.

Das heißt nicht, dass SSH per se sicher ist, jedoch ist zumindest der Übertragungsweg mittels Verschlüsselung abgesichert. Von SSH gibt es zwei Versionen ssh-1 und ssh-2. Welche davon vom sshd unterstützt wird, wird in der sshd.conf geregelt. v1 sollte ausgeschaltet sein, da es als nicht sicher angesehen wird.

Es gibt auf der Seite von Simon Tatham einige Informationen zum Thema Putty und SSH, die sich jeder Wissbegierige ruhig mal anschauen sollte – spätestens jedoch wenn Fragen auftauchen.


Die Shell

Es gibt eigentlich nicht die Shell – sondern eher mehrere Shells. Eine Shell (Hülle, Schale) ist im Prinzip ein Programm, welches einem User die Möglichkeit gibt mit seinem Computer zu sprechen. Es geht dabei natürlich nicht um Liebeserklärungen, aber beispielsweise um eine Arbeitsanforderung. Ein „Bitte lieber Rödelheimer, lösche mal die Datei X“ würde mit einem „rm x“ übersetzt werden – und das ist erst der Anfang (naja eigentlich ist der Befehl „login“ der Anfang...).

Also, wie gesagt, die Shell ist ein Programm für die Schnittstelle Mensch – Computer und wie es immer so ist, es gibt davon mehrere. Die Bourne Shell hat laut wikipedia.de den Anfang gemacht, es folgten viele weitere. Die Art der Shell definiert, welche Befehle der User eingeben kann, wie die Ausgabe der Befehle aussieht und auch wie die Skriptsprache funktioniert. Denn man kann in der Shell auch programmieren (siehe dazu den wikipedia Link).

In heutigen Linux-Betriebssystemen wird oft die Bourne-Again-Shell verwendet, eine aufgebohrte Variante der Bourne-Shell mit einigen Erweiterungen aus der C-Shell (csh) und Korn-Shell (ksh).


SSH Sicherheit

Quick and Dirty:
- diesen Thread durchlesen (eine Art Checkliste)
- Beispiel einer sshd.conf

Die zwei wichtigsten Dinge:
  • SSH Port verlegen
    in der sshd.conf die Zeile „Port 22“ abändern auf „Port 1234“ bspw.
  • Root den Zugriff verbieten
    Einen zusätzlichen SSH User ohne Rechte anlegen und dann PermitRootLogin No in der sshd.conf setzen
Im Anschluß „/etc/init.d/sshd restart“ ausführen um den SSHDaemon neu zu starten, damit die Änderungen wirksam werden.

Update 060807: (unter anderen Betriebssystemen wie bspw. Debian kann es auch „/etc/init.d/ssh restart“ sein)

Tipp: Ein „#“ vor der Zeile Port oder PermitRootLogin muss herausgenommen werden, da das „#“ die Zeile als Kommentar deklariert (bitte nicht vergessen vorher einen User anzulegen, danke für die Tipps DanielD).



Hintergründe:

Der sshd bietet die Möglichkeit von einem beliebigen Computer im Internet über das Internet auf seinen (v)Host (=virtual Host) zuzugreifen. Da der sshd nicht weiß, wer die Erlaubnis hat auf ihn zuzugreifen wird grundsätzlich jeder Client erstmal an den Login gelassen, der IP und Port des sshd kennt.

Vereinfacht gesprochen: Solange ich die Telefonnummer von jemanden kenne, kann mich nichts davon abhalten, denjenigen anzurufen.

D.h. es gibt Programme im Internet, die wild alle IP Adresse (Telefonnummern) durchprobieren, allerdings mit dem Zusatz „Port 22“. Antwortet eine IP Adresse (ein Server), weiß das Programm, dass auf diesem Server wohl ein sshd unter Port 22 läuft. Im Anschluß daran versucht das Programm nun sich auf diesem Computer einzuloggen. Als Loginname wird vermutlich root versucht und sollte es den nicht geben, bzw. sollte der nicht erlaubt sein sich einzuloggen wird mit einem Brute-Force- oder einem Wörterbuchangriff versucht einen gültigen Benutzernamen herauszubekommen. Sollte es damit Erfolg haben probiert das Programm mit Brute-Force- und Wörterbuchangriff das Passwort zu erraten.

Damit diese Angriffe nicht erfolgreich sind genügt ein ausreichend starkes Passwort aus. Damit die Versuche aber von vornherein ins Leere laufen, ohne dass ein normales Angriffsprogramm herausfindet, dass ein sshd läuft ist es sinnvoll einen Nicht-Standard-Port zu wählen, also wie im obigen Quick and Dirty Beispiel 1234 oder 32322. Die Portangabe sollte höher als 1024 und muss niedriger als 65536 sein. Das entlastet die Logfiles ganz ungemein.

Desweiteren sollte der User root nicht die Erlaubnis haben sich einzuloggen. Besser wäre es bspw. eine user auf dem Linux zu erstellen, der keinerlei Rechte besitzt, außer sich per SSH einzuloggen und sich dann mit einem Befehl „su“ als root anzumelden. Dadurch entsteht eine doppelte Hürde für den Angreifer. Selbst wenn er den ersten Zugang knackt kann er immer noch nicht viel bewirken, ihm fehlen dann für weitere Aktionen die Berechtigungen und er müsste den root auch noch knacken. Das Passwort sollte aber in beiden Fällen ein starkes sein.

Das Beispiel mit der Telefonnummer ist übrigens ganz passend, da man bei der Telekom manche Telefonnummern auf eine schwarze Liste setzen kann. Damit wird dem Anrufer mit der Nummer X verboten, den Anschluss Y anzurufen. So ähnlich geht das auch mit einem Serverdienst wie SSH.

Nützliche Tools
Editoren:
  • vi
  • vim
  • nano
  • pico

Datei Manager
 
Last edited by a moderator:
Kleine Korrektur zum Suchen:

find -name 'BEGRIFF*'
... mit (einfachen) Anführungszeichen sollte verwendet werden, wenn nach Dateien gesucht wird, die mit BEGRIFF anfangen. Ohne die einfachen Anführungszeichen klappt es nur mit Glück(TM).

Und zu dem Editor vi: Ich nutz ihn ja auch, aber ich würde empfehlen, zuerst nano oder pico zu verwenden. Diese Editoren sind wesentlich weniger frustrierend für Einsteiger. (Bei Debian ist nano standardmäßig dabei. Keine Ahnung, wie das bei anderen Distros ist.)

Zum Punkt SSH-Sicherheit:
PermitRootLogin auf No ist gut, aber mach doch bitte noch eine große Warnung dazu, dass man sich vorher einen anderen Benutzer angelegt haben sollte, weil man sich sonst aussperrt. Nicht, dass jemand ausgerechnet an der sshd.conf seine Texteditor-Künste messen möchte und das von dir beschriebene # unüberlegt rausnimmt ...

MfG
DanielD
 
Ein sehr hilfreiches Tool meines Erachtens ist der Midnight-Commander.
Einfach
Code:
mc
in die Console geben und schon hat man einen sehr schönen Filebrowser, welcher sich auch mit der Maus bedienen lässt.
Falls noch nicht installiert: einfach nachinstallieren (Yast, apt...)

Ich arbeite auf keinen Fall ohne dieses Tool. Für all das "cp" "ls" etc ist mir die Zeit einfach zu schade :)
Vielleicht hilft dieser Tip ja einem Anfänger.
 
find -name 'BEGRIFF*'
... mit (einfachen) Anführungszeichen sollte verwendet werden, wenn nach Dateien gesucht wird, die mit BEGRIFF anfangen. Ohne die einfachen Anführungszeichen klappt es nur mit Glück(TM).
Mit Glück oder mit dem Wissen um Shell-Escaping. Wie z.B.:
Code:
find <path> -name BEGRIFF\*
Find erwartet als ersten Parameter btw. den Ort, an dem es mit der Suche beginnen soll.

BTW: Super vim (vim ist viiiiiiiiiiiiiel besser als vi) lernen kann man z.B. mit der vi-Referenz-Tasse, die es in jedem gut sortieren GNU/Linux-Devotionalienhandel zu haben gibt.
Ohne Koffein gibts das auch unter Vim Commands Cheat Sheet
 
Hallo,

@DanielD: Ich habe Deine Hinweise eingebaut, danke! Den nano bzw. pico habe ich unten als Alternative genannt, aber nicht weiter beschrieben. Die meisten Distributionen haben vi installiert oder / und vim - bei nano oder pico kann es, wie Du schon schriebst tatsächlich sein, dass es evtl. Suse nicht hat.

@server4downs: Der midnight Commander ist sicherlich wesentlich intuitiver als die Shell - ich werde Ihn in einem separatem Kapitel für "Hilfreiche Tools" mal erwähnen.

@elias: Ich habe den vim mal als Alternative zu vi erwähnt.

Danke Euch allen für die Ideen.

Grüße
Sinepp
 
Ich habe auch mal eine Frage, /etc/init.d/sshd restart startet den Shell neu (nachdem ich den Port nach oben verlegt habe).

Und was mache ich, wenn der Shell dann nicht mehr startet? Habe ja den Port verlegt und habe dann Angst, dass der Shell nach dem Neustart einfach nicht mehr startet.
Mir ist es mal passiert, dass ich das System mit shoutdown -r now neugestartet habe und es dann nicht mehr aus dem Bootmodus rauskam.

Kann das bei SSH auch passieren?
 
Ja, das kann durchaus passieren, ABER Deine aktuelle Shell wird nicht gekappt. Man bleibt also die ganze Zeit connected und baut via Putty einfach eine neue Verbindung auf und überprüft, ob alles glatt gegangen ist.
 
Okay, dann lasse ich ein Shell zur Sicherheit offen.
Was genau kann ich denn machen, wenn der Shell wirklich crasht?
Kann man die sshd_config dann irgendwie zurücksetzen? Eine Sicherheitskopie wird natürlich gemacht.
 
Ich weiß einfach nicht, wo das Problem liegt. Das obige Tutorial ist 'bullet-proof'!

Sollte es nicht klappen, dann kopierst Du die Sicherheitskopie einfach über Deine veränderte Fassung und startest den sshd nochmal neu.
 
Also das neustarten von SSH geht nicht:
/etc/init.d/sshd restart

Datei oder Verzeichnis wird nicht gefunden.
Was läuft da falsch?
 
Welche Distribution nutzt Du? Vllt. ist es auch /etc/init.d/ssh. Tipp einfach mal /etc/init.d/ss <2x TAB-Taste drücken> und schau was passiert.
 
Ich benutze Debian 3.1.
Bei deinem Tipp wird folgendes ausgegeben:
Code:
Usage: /etc/init.d/ssh (start|stop|reload|force-reload|restart)

Also muss ich /etc/init.d/ssh restart neutzen?
 
Puh, also es hat jetzt geklappt.
Der neue Port wird angenommen und es funktioniert auch alles.

Danke. ;)
 
MOD: Full-Quote entfernt!
Was heisst da denn dieses force-reload?
Kenn ich gar nicht.
 
Last edited by a moderator:
Was heisst da denn dieses force-reload?

There is only one way to find out -- oder anders gesagt: Das Schöne an UNIX ist, dass ein erstaunlich großer Teil der Funktionalität durch Scripte realisiert wird, die man einfach anschauen kann:

Code:
less /etc/init.d/ssh

Nur keine falsche Angst -- falls eine Datei keinen für Menschen lesbaren Code (z.B. Binärdaten) enthält, wird less entweder darauf hinweisen oder im schlimmsten Fall nur Müll anzeigen.

Da der laufende sshd seine Konfigurationsdaten nicht wirklich neu laden kann, vermute ich, dass force-reload das Gleiche macht, wie restart, nämlich den Masterdaemon beenden und anschließend wieder starten.

Grüße,
LinuxAdmin
 
Bei SSH-Verbindungen würde ich jedoch immer darauf achten, dass Du die Kommandos einschränkst.

ssh -l user server '\rm -R *' waere fuer einen Angreifer ein gefundenes Fressen. Ueber die athorized_keys kannst Du explizit ein Kommando angeben

SSH authorized_keys
 
Was genau möchtest Du uns damit jetzt sagen? Das passt hier doch nun überhaupt nicht rein.

Das Einschränken ist z.B. für rsync o.ä. zu empfehlen, wo man einen AuthKey ohne Passwort vergibt. Ansonsten ist das Banane!
 
hmmm ich glaube ich habe nen Problem

Hallo,
also ich habe den Port auch gewechselt und den Root Zugang gesperrt so dass man sich halt über einen User im Putty anmeldet und anschließend su root eingibt und root rechte hat. Klappt alles bestens ....

nur wie komm ich jetzt bitte mit WINSCP zurecht ... wie kann ich da auf den User root wechseln wenn ich mich mit einen ganz normalen User angemeldet habe.

Selbst wenn man auf eine Datei geht z.b im Root Verzeichnis kann man auf Rechte oder Benutzer Klicken wie man will da passiert nichts.

Kann mir jemand nen Tip geben??
 
Back
Top