Shell-Tipps

Know-how für die Kommandozeile

28.12.2012 Erfahrene Linux-Nutzer schwören auf flexible Kommandozeilentools, mit denen sich manche Aufgabe schneller bewältigen lässt als in grafischen Programmen. Wir stellen die wichtigsten Anwendungen vor, um auch Einsteiger zu einem Ausflug in die Shell zu ermutigen.

Tipp: Mit SSH auf entfernten Rechnern arbeiten

Mit SSH arbeiten Sie auf entfernten Rechnern, als säßen Sie direkt davor. Secure Shell heißt nicht nur das Protokoll, sondern auch die Anwendung selbst. Mit dem Kommando ssh, Ihrem Benutzernamen und dem dazugehörigen Passwort melden Sie sich per Terminal oder Konsole auf dem entfernten System an und führen wahlweise Befehle auf der Shell aus oder starten grafische Anwendungen (siehe Tipp ##). Alle Daten wandern dabei verschlüsselt durchs Netz.

Damit das klappt, muss auf Ihrem Rechner ein SSH-Client installiert sein; auf der Gegenseite ist ein SSH-Server erforderlich. Während Ubuntu und andere Debian(-basierte) Systeme Server und Client in zwei getrennten Paketen ausliefern (openssh-client und openssh-server), bietet OpenSuse beide Komponenten in einem einzigen Paket (openssh) an.

Um sich bei einem entfernten Rechner anzumelden, verwenden Sie auf der Shell das Kommando ssh. Zusätzlich geben Sie beim Verbindungsaufbau den Benutzernamen und den Namen des Zielrechners beziehungsweise dessen IP-Adresse an. Heißt der entfernte Rechner beispielsweise lion und ist der Benutzername huhn, tippen Sie Folgendes:

ssh huhn@lion

Alternativ verwenden Sie die IP-Adresse im Befehl, wenn die Namensauflösung nicht funktioniert:

ssh huhn@192.168.2.21

Den Benutzernamen können Sie übrigens weglassen, wenn Ihr Account auf beiden Maschinen gleich heißt. Bei der Passworteingabe sehen Sie keine Sternchen als visuelles Feedback, Sie tippen also blind (Abbildung 1).

Abbildung 1

Abbildung 1: Da der Benutzername auf beiden Rechnern "huhn" heißt, darf er im Kommando fehlen. Das Passwort tippen Sie blind.

Abbildung 1 zeigt übrigens, was bei der allerersten Kontaktaufnahme passiert: Die Gegenseite ist SSH noch unbekannt, und so fragt das Programm, ob Sie die Verbindung wirklich aufbauen wollen. Nach Eingabe von yes schreibt SSH den so genannten Fingerabdruck ("fingerprint") in die Datei known_hosts im versteckten Ordner .ssh in Ihrem Home-Verzeichnis. Bei zukünftigen Verbindungen schaut das Programm dort nach, ob der Fingerabdruck derselbe ist, und verweigert die Verbindung, falls er abweicht [1].

Tipp: Mit SSH grafische Anwendungen starten

Wie im vorigen Tipp erwähnt, ist es auch möglich, grafische Anwendungen über SSH zu nutzen. Die Funktion nennt sich X-Forwarding. Sie setzt voraus, dass auf dem SSH-Server eine solche Weiterleitung erlaubt ist. Sie können das mit einem Blick in die Konfigurationsdatei des Servers schnell überprüfen:

less /etc/ssh/sshd_config

Mit den Pfeiltasten blättern Sie im Programm less hoch und runter, und mit [Q] beenden Sie es. Suchen Sie nach einer Zeile, die einen solchen Eintrag enthält:

X11Forwarding yes

Steht dort no oder ist die ganze Zeile durch ein Rautezeichen (#) am Anfang auskommentiert, ist die Weiterleitung ausgeschaltet. Unter OpenSuse und Ubuntu ist das Feature in der Voreinstellung jedoch aktiviert.

Um ein grafisches Programm einer entfernten Maschine auf dem eigenen Desktop anzuzeigen, geben Sie beim ssh-Aufruf zusätzlich die Option -X an:

ssh -X huhn@lion

Achten Sie darauf, dass es sich um ein großes X handelt; der Kleinbuchstabe bewirkt das Gegenteil und schaltet die Weiterleitung ab. Nach der Passworteingabe starten Sie nun die gewünschte Anwendung (Abbildung 2). Tipp: Setzen Sie hinter den Befehl ein Kaufmannsund-Zeichen ("&"), um den Prozess direkt im Hintergrund zu starten und die Shell nicht zu blockieren [2]. Beachten Sie, dass auch bei einer schnellen Verbindung zur Gegenstelle durchaus Ruckler und andere Performance-Einschnitte auftreten können. Um grafische Programme wirklich flüssig auf entfernten Rechnern zu bedienen, empfiehlt sich gegebenenfalls eher eine Lösung wie X2go oder FreeNX.

Abbildung 2

Abbildung 2: Das X-Forwarding funktioniert auch von Linux zu OS X, wenn dort ein SSH-Server läuft. Hier zeigt der OpenSuse-Desktop die Programme Xeyes, Display (aus dem ImageMagick-Paket) und ein Xterm, die auf dem OS-X-Rechner namens "lion" laufen.

Tipp: SSH-Schlüsselpaar erstellen und nutzen

SSH ist per se schon ziemlich sicher, die Zuverlässigkeit steht und fällt jedoch mit dem eigenen Passwort. Wesentlich schwerer zu knacken als ein einfaches Kennwort ist ein Schlüsselpaar, siehe dazu auch den Schwerpunkt unserer letzten Ausgabe [3]. Ein solches Paar besteht aus einem privaten und einem öffentlichen Schlüssel. Ersterer befindet sich auf dem eigenen Rechner in der Datei ~/.ssh/id_rsa (wenn Sie die empfohlene RSA-Verschlüsselung verwenden), Letzterer auf dem Zielsystem in der Datei ~/.ssh/authorized_keys. Den privaten Schlüssel sollten Sie zusätzlich mit einer Passphrase schützen. Die folgende Schritt-für-Schritt-Anleitung zeigt, wie Sie ein solches Schlüsselpaar erstellen:

  1. Beim Anlegen hilft Ihnen das Kommandozeilentool ssh-keygen, das unter Ubuntu Bestandteil des Pakets openssh-client ist und unter OpenSuse zum Paket openssh gehört. Am Prompt tippen Sie den folgenden Befehl, um ein RSA-Schlüsselpaar zu erstellen:

    ssh-keygen -t rsa
  2. Die nächste Frage, ob Sie den privaten Schlüssel in der Datei ~/.ssh/id_rsa speichern möchten, bestätigen Sie mit der Eingabetaste:

    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/↩
    huhn/.ssh/id_rsa):
  3. Das Programm fordert Sie nun auf, ein Kennwort einzugeben und dieses zu wiederholen. Beide Male tippen Sie ohne visuelles Feedback und drücken danach [Eingabe]:

    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
  4. Abschließend sehen Sie verschiedene Meldungen, dass alles geklappt hat (Abbildung 3). Werfen Sie einen Blick ins Verzeichnis ~/.ssh, so sehen Sie das neue Schlüsselpaar, die beiden Dateien id_rsa und id_rsa.pub.

    Abbildung 3

    Abbildung 3: Mit dem Programm "ssh-keygen" erstellen Sie ein SSH-Schlüsselpaar auf der Kommandozeile.

  5. Den öffentlichen Schlüssel, also die Datei mit der Endung .pub, übertragen Sie nun auf den entfernten Rechner. Das können Sie mit scp ("secure copy") erledigen und den Schlüssel von Hand in die Datei ~/.ssh/authorized_keys einfügen, komfortabler geht's aber mit dem Skript ssh-copy-id. Ersetzen Sie im folgenden Befehl die Benutzer- und Rechnernamen durch Ihre eigenen:

    ssh-copy-id huhn@lion
  6. Auf Nachfrage geben Sie das Kennwort des Zielsystems ein. Beachten Sie, dass Sie hinter der Option -i auch einen anderen Schlüssel definieren können, wenn dieser vom Standard (id_rsa.pub) abweicht. Hat alles geklappt, schlägt das Skript vor, dass Sie sich nun auf der entfernten Maschine einloggen und überprüfen, dass der öffentliche Schlüssel (und nur dieser) in der Datei ~/.ssh/authorized_keys angekommen ist.

Bei der nächsten Anmeldung sollte das Zielsystem nicht mehr nach Ihrem Benutzerkennwort, sondern nach der SSH-Passphrase fragen.

Um eine Anmeldung auf einem entfernten Rechner ganz ohne Interaktion und Eintippen eines Kennworts zu ermöglichen, können Sie die SSH-Passphrase in die eigene Schlüsselbundverwaltung aufnehmen. Unter Gnome steht dazu das Programm Seahorse (Abbildung 4), unter KDE die KDE-Brieftasche (KWallet) zur Verfügung. Beide Anwendungen bieten von sich aus an, den Schlüssel beim ersten Einsatz aufzunehmen. Wenn Sie (wie in der Anleitung gezeigt) ssh-copy-id einsetzen, um den öffentlichen Schlüssel zu übertragen, ist das bereits dann der Fall.

Abbildung 4

Abbildung 4: Die Schlüsselbundverwaltungen der Desktopumgebungen (hier Seahorse unter Gnome) speichern SSH-Schlüssel und die Passphrase, so dass Sie sich ohne Interaktion auf entfernten Rechnern anmelden können.

Tipp: Lokale und entfernte Datei vergleichen

Mit dem Kommando diff vergleichen Sie zwei Textdateien auf der Konsole miteinander [5]. Dabei geben Sie grundsätzlich hinter dem Befehl diff die beiden Dateien an:

diff datei1 datei2

Haben Sie wie im vorigen Tipp gezeigt ein SSH-Schlüsselpaar erstellt und verwalten dieses über eine digitale Brieftasche wie Gnome oder KWallet, dann können Sie mit einem kleinen Trick auch zwei Dateien auf unterschiedlichen Rechnern gegenüberstellen. Dazu teilen Sie diff über die Shell-Konstruktion <(...) mit, dass es die Ausgabe eines ssh-Aufrufs als Datei interpretieren soll. ssh rufen Sie dabei mit einem cat-Kommando auf, das eine Datei von der entfernten Maschine ausgibt und die Verbindung direkt danach trennt. Das zweite Argument ist einfach die lokale Datei, im folgenden Beispiel vergleicht diff die lokale und die entfernte Version der Datei /etc/resolv.conf:

diff <(ssh lion cat /etc/resolv.conf) /etc/resolv.conf

Eine Passworteingabe für SSH ist ja aufgrund des Schlüsselpaars und der gespeicherten Passphrase nicht erforderlich. Praktisch: Setzen Sie zuätzlich die diff-Option -y ein, erscheint die Ausgabe in zwei Spalten nebeneinander – das ist übersichtlich und prima zum Vergleichen.

Tipp: "mcedit": Textbausteine als Makros

Der im letzten Heft vorgestellte Texteditor mcedit [4] bietet eine Makro-Funktion, mit der Sie schnell Textpassagen aufzeichnen und später an anderer Stelle auf Tastendruck einfügen. Um die Aufnahme zu beginnen, drücken Sie [Strg]+[R]. Tippen Sie danach den gewünschten Baustein ein. Dass die Aufnahme läuft, erkennen Sie in der oberen Statuszeile. Hinter dem Dateinamen erscheint ein R hinter dem M in den eckigen Klammern:

/home/huhn/text.txt   [-MR-]

Betätigen Sie erneut [Strg]+[R], um den Mitschnitt zu beenden. mcedit zeigt einen Dialog an, der fragt, ob Sie das Makro speichern möchten. Geben Sie dazu eine beliebige Taste als "Hotkey" an; hier ist nur ein einzelner Buchstabe und keine Kombination möglich. Nachdem Sie die Taste gedrückt haben, schließt sich der Dialog wieder, und mcedit legt das Makro in der Datei ~/.local/share/mc/mc.macros ab.

Um den Textbaustein an der aktuellen Cursorposition einzufügen, kombinieren Sie ihn mit der Alt-Taste. Haben Sie beispielsweise für "Mit freundlichen Grüßen" ein [G] als Hotkey gespeichert, fügt [Alt]+[G] den Schnipsel ein.

Tipp: "mc": Pfad kopieren und am Prompt einfügen

Der Midnight Commander (mc) ist ein Dateimanager für die Shell. Er bietet ein praktisches Feature für alle, die gerne die eingebaute Eingabezeile am unteren Rand verwenden. Sind Sie (mit der Maus oder mit den Pfeiltasten) im Verzeichnisbaum zu einem entfernten Ort gewandert und wollen den vollen Pfad kopieren und direkt am Prompt einfügen, drücken Sie einfach die Tastenkombination [Strg]+[X] und dann [P].

Tipp: "mc": Verzeichnisbaum anzeigen

Dateien und Verzeichnisse sind auf einem Linux-System wie in einem Baum angeordnet. Oben steht die Wurzel, repräsentiert durch den Schrägstrich /. Von da ausgehend finden Sie bin, boot, etc, home und so weiter. Der Midnight Commander kann die Baumstruktur anschaulich darstellen. Aktivieren Sie dazu das obere Menü und wählen Sie entweder für Links oder für Rechts die Baumansicht aus dem Menü aus (Abbildung 5).

Abbildung 5

Abbildung 5: Gewusst wo – im Midnight Commander blenden Sie eine Baumansicht ein, die hilft, sich in der Verzeichnisstruktur des Systems zurechtzufinden.

Tipp: Schnell zwischen Shell und "mc" wechseln

Auch wenn der Midnight Commander am unteren Rand eine Eingabezeile anzeigt und dort auch Ihre Befehle entgegennimmt, ist es doch manchmal übersichtlicher, das ganze Terminal vor sich zu sehen. Dazu können Sie den Dateimanager auf dem üblichen Weg mit [Strg]+[Z] suspendieren und später durch Eingabe von fg reaktivieren. Alternativ verwenden Sie die Tastenkombination [Strg]+[O], was nur die Midnight-Commander-Oberfläche versteckt (bis Sie erneut [Strg]+[O] drücken), den Dateimanager aber nicht anhält.

Glossar

RSA

Dieses asymmetrische kryptografische Verfahren ist nach seinen Erfindern Rivest, Shamir und Adleman benannt. RSA kommt sowohl bei der Verschlüsselung als auch bei digitalen Signaturen zum Einsatz.

Infos

[1] Guru-Training zu SSH/SCP: Heike Jurzik, "Auf Nummer Sicher", EasyLinux 10/2005, S. 84 ff., http://www.easylinux.de/2005/10/084-guru-ssh/

[2] Arbeiten auf der Shell: Heike Jurzik, "Befehlsgewaltig", EasyLinux 11/2005, S. 81 ff., http://www.easylinux.de/2005/11/081-guru-shell/

[3] Grundlagen der Verschlüsselung: Hans-Georg Eßer, "Vertraulich", EasyLinux 04/2012, S. 32 ff., http://www.linux-community.de/artikel/27116

[4] Artikel zu Mcedit: Heike Jurzik, "Befehlsgewaltig", EasyLinux 04/2012, S. 115 ff., http://www.linux-community.de/artikel/26775

[5] Dateien vergleichen mit "diff" und KDiff3: Heike Jurzik, "Der feine Unterschied", EasyLinux 10/2004, S. 83 ff., http://www.easylinux.de/2004/10/083-guru-diff/

Tip a friend    Druckansicht beenden Bookmark and Share
Kommentare