Verwenden Sie OpenSSH, um eine sichere Umgebung für die Ausführung von Remote-Terminals bereitzustellen. Die grundlegende Verwendung von OpenSSH und dem Terminal ist sehr einfach, aber in diesem Artikel werden auch andere Elemente behandelt, die eine automatische Anmeldung bei Remote-Hosts ermöglichen, Möglichkeiten zum Ausführen von Remote-Anwendungen und das sichere Kopieren von Dateien zwischen Hosts.
Über diese Serie
Der typische UNIX®-Administrator verfügt über eine Reihe wichtiger Dienstprogramme, Know-how und Systeme, die häufig zur Unterstützung des Verwaltungsprozesses verwendet werden. Es gibt verschiedene wichtige Dienstprogramme, Befehlszeilenketten und Skripte, um verschiedene Prozesse zu optimieren. Einige dieser Tools stammen aus dem Betriebssystem, das meiste Know-how basiert jedoch auf langjähriger Erfahrung und der Notwendigkeit, die Arbeit des Systemadministrators zu entlasten. Diese Artikelserie konzentriert sich darauf, die in verschiedenen UNIX-Umgebungen verfügbaren Tools optimal zu nutzen, einschließlich Möglichkeiten zur Vereinfachung von Verwaltungsaufgaben in heterogenen Umgebungen.
Warum OpenSSH verwenden?
Die Standard-Netzwerkdienste, die Sie täglich nutzen, wie FTP, Telnet, RCP, Remote Shell (rsh) usw., funktionieren in einer geschlossenen Umgebung gut, aber die über das Netzwerk mithilfe dieser Dienste übertragenen Informationen sind unverschlüsselt. Jeder, der einen Paket-Sniffer in Ihrem Netzwerk oder einem Remote-Computer verwendet, kann die ausgetauschten Informationen und manchmal sogar Passwortinformationen einsehen.
Darüber hinaus sind bei all diesen Diensten die Möglichkeiten zur Automatisierung des Anmeldevorgangs begrenzt und basieren häufig auf der Einbettung eines Klartextkennworts in die Befehlszeile, um Anweisungen auszuführen, was den Anmeldevorgang noch unsicherer macht.
Um diese Einschränkungen zu umgehen, wurde das Secure Shell (SSH)-Protokoll entwickelt. SSH bietet Verschlüsselung für den gesamten Kommunikationskanal, einschließlich des Austauschs von Anmelde- und Passwort-Anmeldeinformationen, und arbeitet mit öffentlichen und privaten Schlüsseln, um eine automatische Authentifizierung für Anmeldungen bereitzustellen. Sie können auch SSH als zugrunde liegendes Transportprotokoll verwenden. Die Verwendung von SSH auf diese Weise bedeutet, dass nach dem Öffnen einer sicheren Verbindung alle Arten von Informationen über den verschlüsselten Kanal ausgetauscht werden können, und sogar HTTP und SMTP können diese Methode zur Sicherung des Kommunikationsmechanismus verwenden.
OpenSSH ist eine kostenlose Implementierung der Protokolle SSH 1 und SSH 2. Es wurde ursprünglich als Teil des Betriebssystems OpenBSD (Berkeley Software Distribution) entwickelt und wird jetzt als allgemeine Lösung für UNIX oder Linux® und ähnliche Betriebssysteme veröffentlicht.
Installieren Sie OpenSSH
OpenSSH ist kostenlose Software und kann von der Hauptwebsite von OpenSSH heruntergeladen werden (siehe Ressourcen). OpenSSH-Systeme können aus Quellcode auf einer Vielzahl von Systemen erstellt werden, darunter Linux, HP-UX, AIX®, Solaris, Mac OS X und mehr. Normalerweise ist es möglich, vorkompilierte Binärdateien für die von Ihnen gewählte Plattform und Version zu finden. Einige Anbieter bieten sogar OpenSSH-Toolkits als Teil des Betriebssystems an.
Um OpenSSH zu erstellen, benötigen Sie Folgendes:
Wenn Sie die Standardkonfigurationseinstellungen verwenden müssen, verwenden Sie die normale Build-Sequenz, wie in Listing 1 unten gezeigt.
$ ./configure $ machen $ make install |
Dadurch werden Binärdateien, Bibliotheken und Konfigurationsdateien im Verzeichnis /usr/local installiert, beispielsweise Binärdateien in /usr/local/bin und Konfigurationsdateien in /usr/local/etc. Wenn Sie verschiedene Tools in die Hauptumgebung integrieren möchten, müssen Sie möglicherweise die Option --prefix angeben, um das Basisverzeichnis festzulegen, und die Option --sysconfdir, um den Speicherort der Konfigurationsdatei festzulegen:
$ ./configure --prefix=/usr --sysconfidir=/etc/ssh |
Zu den anderen allgemeinen Optionen, die Sie möglicherweise angeben, gehören:
Verwenden Sie nach Abschluss der Konfiguration make, um auf normale Weise zu erstellen.
Nachdem der Erstellungs- und Installationsprozess abgeschlossen ist, müssen Sie das System konfigurieren, indem Sie zunächst einen SSH-Schlüssel erstellen, der das System eindeutig identifiziert, und dann die sichere Kommunikation zwischen Client und Host aktivieren. Sie können Folgendes ausführen:
$ Host-Schlüssel erstellen |
Alternativ können Sie die einzelnen Schritte auch manuell auf der Kommandozeile ausführen. Sie müssen drei Schlüssel erstellen (einen für jeden der wichtigsten Verschlüsselungsalgorithmen: rsa1, rsa und dsa). Listing 2 zeigt beispielsweise, wie der Schlüssel rsa1 erstellt wird.
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key Generieren eines öffentlichen/privaten RSA1-Schlüsselpaars. Geben Sie die Passphrase ein (leer für keine Passphrase): Geben Sie dieselbe Passphrase erneut ein: Ihre Identifikation wurde in /etc/ssh//ssh_host_key gespeichert. Ihr öffentlicher Schlüssel wurde in /etc/ssh//ssh_host_key.pub gespeichert. Der Schlüsselfingerabdruck ist: 43:aa:58:3c:d8:30:de:43:af:66:2a:b2:8d:02:08:86 root@remotehost |
Sie werden zur Eingabe Ihres Passworts aufgefordert. Für den Host-Schlüssel benötigen Sie wahrscheinlich kein Schlüsselkennwort, Sie können also die Eingabetaste drücken, um ein leeres Kennwort zu verwenden. Alternativ können Sie die Option -N in der Befehlszeile verwenden, um den Vorgang zu beschleunigen (siehe Listing 3).
$ ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N "" Generieren eines öffentlichen/privaten RSA1-Schlüsselpaars. Ihre Identifikation wurde in /etc/ssh/ssh_host_key gespeichert. Ihr öffentlicher Schlüssel wurde in /etc/ssh/ssh_host_key.pub gespeichert. Der Schlüsselfingerabdruck ist: a3:e3:21:4f:b5:9f:ff:05:46:66:bc:36:a1:47:a0:64 root@remotehost |
Wiederholen Sie nun den Vorgang, um die RSA- und DSA-Schlüssel zu erstellen (siehe Listing 4).
$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" $ ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N "" |
Dadurch werden für jeden Schlüsseltyp zwei Dateien erstellt: der öffentliche Schlüssel (in einer Datei mit der Endung .pub) und der private Schlüssel. Sie sollten sicherstellen, dass der private Schlüssel nur von Root- und SSH-Prozessen gelesen wird – dies sollte automatisch konfiguriert sein. Möglicherweise möchten Sie den öffentlichen Schlüssel an einen zentralen Ort auf einer NFS-Freigabe (Network File System) kopieren, damit Benutzer ihn zur Liste der bekannten Hostschlüssel hinzufügen können.
Schließlich müssen Sie den SSHD-Prozess starten und ihn so konfigurieren, dass er beim Start ausgeführt wird. Für Linux-Hosts finden Sie das entsprechende Init-Skript in contrib/redhat/sshd.init, das zu /etc/init.d hinzugefügt werden kann.
Verwenden von SSH für den grundlegenden Terminalzugriff
Die Hauptaufgabe von OpenSSH besteht darin, ein SSH-Tool zu sein, eine sichere Alternative zum Telnet-Protokoll für die sichere Remote-Anmeldung bei UNIX- oder Linux-Hosts.
Um über die Standard-Shell eine Verbindung zu einem Remote-Host herzustellen, geben Sie einfach den Hostnamen ein:
$ ssh remotehost |
Standardmäßig versucht das System, den aktuellen Benutzernamen als Anmeldenamen zu verwenden. Um einen anderen Anmeldenamen zu verwenden, stellen Sie dem Hostnamen den Anmeldenamen voran, getrennt durch das @-Symbol. Zum Beispiel:
$ ssh mc@remotehost |
Sie werden zur Eingabe Ihres Benutzerkennworts aufgefordert – dies ähnelt Telnet.
Wenn Sie zum ersten Mal eine Verbindung zu einem Host herstellen, werden Sie gefragt, ob Sie eine Kopie des öffentlichen Schlüssels des Remote-Hosts in einer „Bekannte Hosts“-Datei speichern möchten (siehe Listing 5).
$ ssh root@remotehost Die Authentizität des Hosts „remotehost (10.211.55.3)“ kann nicht festgestellt werden. Der Fingerabdruck des RSA-Schlüssels lautet cc:c8:8b:75:3d:b6:00:2f:a9:9c:53:4c:03:0f:3d:1b. Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (ja/nein)? Warnung: „Remotehost“ (RSA) wurde dauerhaft zur Liste der bekannten Hosts hinzugefügt. |
In Zukunft werden Sie diese Warnung nicht mehr erhalten, aber die Warnung wird ausgegeben, wenn das System erkennt, dass der vom Remote-Host zurückgegebene öffentliche Schlüssel nicht mit dem öffentlichen Schlüssel in der Datei des Hosts übereinstimmt, was auf einen möglichen Hackerangriff hinweist. Es könnte auch bedeuten, dass der Administrator nur den Hostschlüssel neu generiert hat.
Im Wesentlichen gibt es keinen Unterschied zwischen SSH- und Telnet-Sitzungen, außer dass SSH-Sitzungen verschlüsselt sind, sodass es nahezu unmöglich ist, in Ihre Sitzung einzudringen oder Ihr Passwort oder die von Ihnen ausgeführten Befehle und Vorgänge zu kennen.
Sie können SSH auch verwenden, um Befehle direkt auf dem Remote-Host auszuführen, ohne eine Shell zu verwenden. Informationen zum Ausführen des Befehls „who“ auf dem Remote-Host finden Sie beispielsweise in Listing 6.
Listing 6. Ausführen des Befehls „who“ auf dem Remote-Host$ ssh mc@remotehost wer Admin-Konsole 23. November 14:04 mc ttyp1 2. Dez. 10:53 (sulaco.mcslp.pri) mc ttyp2 10. Dez. 06:50 (sulaco.mcslp.pri) admin ttyp3 12. Dezember 13:33 mc ttyp4 15. Dezember 12:38 (nautilus.mcslp.p) |
Die Remote-Ausführung emuliert auch die Standardeingabe, -ausgabe und -fehler des Client-Hosts. Dies bedeutet, dass Sie die Ausgabe an einen Remote-Befehl umleiten können. Beispielsweise können Sie Informationen direkt an eine Remote-Datei anhängen, indem Sie die Ausgabe des Befehls an SSH auf dem Remote-Host weiterleiten (siehe Listing 7).
Listing 7. Informationen direkt an eine Remote-Datei anhängen$ echo "Hello World" |ssh mc@remotehost 'cat >> helloworlds.txt' |
Mit dieser Methode können Sie Ihre Produktivität steigern, wenn Sie SSH verwenden, um den Anmeldevorgang zu vereinfachen.
Austausch von Dateien über SFTP
Der Befehl sft ist eine Alternative zu FTP, die den sicheren Kommunikationskanal des SSH-Protokolls verwendet.
Um eine SFTP-Verbindung zu öffnen, geben Sie den Hostnamen in der Befehlszeile an:
$ sftp remotehost |
Beachten Sie, dass der obige Befehl davon ausgeht, dass Sie dieselbe Anmeldemethode wie Ihr aktueller Host verwenden möchten. Um eine andere Anmeldemethode zu verwenden, stellen Sie dem Hostnamen den Benutzernamen voran:
$ sftp mc@remotehost |
Obwohl SFTP ähnlich wie FTP funktioniert, gibt es einige Einschränkungen und Unterschiede. Beispielsweise bietet dir in FTP eine lange Dateiliste (siehe Listing 8).
ftp> dir 502 'EPSV': Befehl nicht verstanden. 227 Eintritt in den Passivmodus (192,168,0,110,150,159) 150 Öffnen der Datenverbindung im ASCII-Modus für die Verzeichnisliste. insgesamt 1472 drwx------ 3 MC-Mitarbeiter 102 4. November 11:17 Desktop drwx------ 3 MC-Mitarbeiter 102 4. November 11:17 Dokumente drwx------ 18 MC-Mitarbeiter 612 5. November 18:01 Bibliothek drwx------ 3 MC-Mitarbeiter 102 4. November 11:17 Filme drwx------ 3 MC-Mitarbeiter 102 4. November 11:17 Uhr Musik drwx------ 4 MC-Mitarbeiter 136 4. November 11:17 Bilder drwxr-xr-x 4 mc staff 136 4. November 11:17 Öffentlich drwxr-xr-x 6 MC-Mitarbeiter 204 4. November 11:17 Seiten drwxrwxrwx 3 Root Staff 102 24. Dezember 07:30 tmp drwxr-xr-x 7 Root Staff 238 11. Dezember 08:39 Testversion 226 Übertragung abgeschlossen. |
In SFTP fungiert dir als Alias für den Befehl zum Auflisten des Hostverzeichnisses, der unter UNIX oder Linux ls ist. Standardmäßig stellt dir nur eine kurze Liste bereit (siehe Listing 9).
sftp> dir Desktop-Dokumente, Bibliothek, Filme, Musik, Bilder, öffentlich Sites tmp-Testversion |
Um eine lange Liste zu erhalten, verwenden Sie dieselben Optionen wie ls (siehe Listing 10).
sftp> dir -l drwx------ 3 MC-Mitarbeiter 102 4. November 11:17 Desktop drwx------ 3 MC-Mitarbeiter 102 4. November 11:17 Dokumente drwx------ 18 MC-Mitarbeiter 612 5. November 18:01 Bibliothek drwx------ 3 MC-Mitarbeiter 102 4. November 11:17 Filme drwx------ 3 MC-Mitarbeiter 102 4. November 11:17 Uhr Musik drwx------ 4 MC-Mitarbeiter 136 4. November 11:17 Bilder drwxr-xr-x 4 mc staff 136 4. November 11:17 Öffentlich drwxr-xr-x 6 MC-Mitarbeiter 204 4. November 11:17 Seiten drwxrwxrwx 3 Root Staff 102 24. Dezember 07:30 tmp drwxr-xr-x 7 Root Staff 238 11. Dezember 08:39 Testversion |
Andere Befehle wie das Ändern von Verzeichnissen (cd, lcd lokal), das Erstellen von Verzeichnissen (mkdir) sowie das Senden (put) und Empfangen (get) von Dateien bleiben unverändert. Die letzten beiden Befehle put und get akzeptieren beide Platzhalter (ähnlich wie mput und mget in FTP). Seien Sie jedoch vorsichtig, wenn Sie mehrere Dateien ohne Platzhalter in SFTP übertragen. Beispielsweise wird erkannt, dass sftp> mget file1 file2 file3 versucht, file1 und file2 abzurufen und sie im lokalen Verzeichnis file3 abzulegen, dieses Verzeichnis existiert jedoch möglicherweise nicht.
Kopieren Sie Dateien zwischen Hosts mit scp
Der Befehl scp funktioniert ähnlich wie der Befehl rc, verwendet jedoch zum Übertragen von Dateien das SSH-Protokoll. Beim Übertragen inhaltsbezogener Dateien oder beim automatischen Austausch von Dateien im Internet ist scp viel besser.
Das Format ähnelt rcp. Sie geben den Dateipfad an, zwischen dem kopiert werden soll, und der Hostname sollte bei Bedarf darin eingebunden werden. Um beispielsweise eine .bashrc-Datei von einem Remote-Host auf Ihren lokalen Computer zu kopieren, verwenden Sie Folgendes:
$ scp remotehost:/users/mc/.bashrc ~/.bashrc |
Um einen zu verwendenden Benutzernamen anzugeben, stellen Sie wie zuvor dem Host den Benutzernamen voran, getrennt durch das @-Symbol:
$ scp mc@remotehost:/users/mc/.bashrc ~/.bashrc |
Vorausgesetzt, der Benutzer, zu dem Sie eine Verbindung herstellen, verfügt über Leseberechtigungen, müssen Sie außerdem das Metazeichen ~ verwenden, um auf die Informationen in Ihrem Home-Verzeichnis zuzugreifen.
$ scp mc@remotehost:~mc/.bashrc ~/.bashrc |
Um aus dem Home-Verzeichnis des angemeldeten Benutzers zu kopieren, verwenden Sie:
$ scp mc@remotehost:.bashrc ~/.bashrc |
Der scp-Befehl unterstützt auch Standarderweiterungsregeln. Um alle .bash*-Dateien zu kopieren, können Sie Folgendes verwenden:
$ scp mc@remotehost:.bash* ~ |
Sie können einzelne Dateien sogar gezielter auswählen, indem Sie erweiternde Klammern ({}) verwenden:
$ scp mc@remotehost:".bash{rc,_path,_aliases,_vars}" ~ |
Beachten Sie, dass die erweiternden Klammern im Dateipfad (nicht im vollständigen Remote-Pfad-Ausdruck) in doppelte Anführungszeichen gesetzt werden.
In allen oben genannten Beispielen werden Sie zur Eingabe des Passworts des Remote-Hosts aufgefordert. Dies kann vermieden werden, indem Sie dem Host den öffentlichen Teil Ihres persönlichen Schlüssels zur Verfügung stellen.
Aktivieren Sie die automatische Anmeldung mit öffentlichem Schlüssel
Wenn Sie sich über ssh, sftp oder scp bei einem Remote-System anmelden, benötigen Sie weiterhin ein Passwort, um den Anmeldevorgang abzuschließen. Durch das Erstellen eines öffentlichen oder privaten Schlüssels, das Anhängen des öffentlichen Teils des Schlüssels an die Datei ~/.ssh/authorized_keys und den Austausch eines gültigen Schlüssels mit der Remote-Site können Sie die Notwendigkeit der Angabe eines Kennworts beseitigen und die automatische Anmeldung zulassen.
Um einen öffentlichen oder privaten Schlüssel zu erstellen, müssen Sie mit ssh-keygen die Art der Schlüsselverschlüsselung angeben. In der Demonstration wird der RSA-Schlüsseltyp verwendet, es sind jedoch auch andere Schlüsseltypen gültig. Informationen zum Erstellen des Schlüssels finden Sie in Listing 11.
$ ssh-keygen-trsa Generieren eines öffentlichen/privaten RSA-Schlüsselpaars. Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/root/.ssh/id_rsa): |
Sie sollten den Speicherort der Datei eingeben, die die Schlüssel enthält (öffentliche und private Komponenten). Die Verwendung der Standardeinstellung (im .ssh-Verzeichnis in Ihrem Home-Verzeichnis) ist normalerweise in Ordnung (siehe Listing 12).
Verzeichnis „/root/.ssh“ erstellt. Geben Sie die Passphrase ein (leer für keine Passphrase): |
Wenn Sie zu diesem Zeitpunkt ein Kennwort eingeben, wird eine Sicherheitsschlüsseldatei erstellt. Sie müssen jedoch bei jeder Verwendung des Schlüssels auch das Kennwort eingeben. Durch Drücken der Eingabetaste ist kein Passwort erforderlich (siehe Listing 13).
Listing 13. Überspringen der Passwortanforderung durch Drücken der EingabetasteGeben Sie dieselbe Passphrase erneut ein: Ihre Identifikation wurde in /root/.ssh/id_rsa gespeichert. Ihr öffentlicher Schlüssel wurde in /root/.ssh/id_rsa.pub gespeichert. Der Schlüsselfingerabdruck ist: 98:da:8d:48:a8:09:44:b1:b3:62:51:2d:a9:6b:61:ba root@remotehost |
Der öffentliche Schlüssel (id_rsa.pub) und der entsprechende private Schlüssel (id_rsa) wurden nun erstellt.
Um die automatische Anmeldung zu aktivieren, müssen Sie den Inhalt des öffentlichen Schlüssels in die Datei „authorized_keys“ im Verzeichnis ~/.ssh auf dem Remote-Host kopieren. Sie können dies mithilfe von SSH automatisieren (siehe Listing 14).
$ cat ./.ssh/id_rsa.pub |. ssh mc@remotehost 'cat >> .ssh/authorized_keys'; |
Wenn Sie dies außerdem häufig auf mehreren Hosts tun, können Sie alle erforderlichen Schritte mithilfe eines kleinen Skripts oder einer Shell-Funktion ausführen, wie in Listing 15 gezeigt.
OLDDIR='pwd'; if [ -z "$1" ]; echo Benötigt Benutzer@Host-Informationen; Ausfahrt; fi; cd $HOME; if [ -e "./.ssh/id_rsa.pub" ]; cat ./.ssh/id_rsa.pub |. ssh $1 'cat >> .ssh/authorized_keys'; anders ssh-keygen -trsa; cat ./.ssh/id_rsa.pub |. ssh $1 'cat >> .ssh/authorized_keys'; fi; cd $OLDDIR |
Sie können das setremotekey-Skript verwenden, um einen vorhandenen Schlüssel zu kopieren. Wenn der Schlüssel nicht vorhanden ist, erstellen Sie vor dem Kopieren einen:
$ setremotekey mc@remotehost |
Wenn Sie sich nun mit einem öffentlichen Schlüssel bei einem Remote-Host anmelden müssen, können Sie ein persönliches Schlüsselskript in Kombination mit einer Liste der von diesem Benutzer auf dem Remote-Host akzeptierten Schlüssel verwenden.
Zusammenfassen
OpenSSH ist ein wichtiges Tool, das die Kommunikation und Informationsübertragung zwischen Computern sichert. Es ist nicht nur eine sichere Alternative zu herkömmlichen Tools wie Telnet, FTP und RCP, sondern kann auch als Transportprotokoll für andere Dienste wie Subversion, X Windows System und rsync dienen. Dieser Artikel zeigt Ihnen die grundlegenden Schritte, die erforderlich sind, um OpenSSH zum Laufen zu bringen, wie Sie die wichtigsten von OpenSSH bereitgestellten Tools am besten nutzen und wie Sie Schlüsselaustausch-Tools verwenden, um Anmelde- und Verbindungsprobleme zu vereinfachen.