Führen Sie automatisierte Skripte über SSH aus
Wir haben Ihnen gezeigt, wie Sie mit SSH Dateien sicher übertragen. Es gibt jedoch ein großes Problem mit dem Standardverhalten von SSH. Sie werden erst dann mit dem Remote-Rechner verbunden, nachdem Sie das Passwort manuell eingegeben haben, was die unbeaufsichtigte Ausführung von Aufgaben ausschließt. Oder doch?
Hier ist ein kurzer Überblick darüber, wie das funktioniert OpenSSH-CLI-Tools (scp und sftp) Arbeiten Sie, damit Sie das Problem besser verstehen können. Wenn Sie Dateien auf oder von dem Remote-Host kopieren möchten, können Sie scp verwenden, das automatisch eine SSH-Verbindung zum Remote-Host initiiert. Jedes Mal, wenn Sie einen scp-Befehl ausführen, wird eine neue Verbindung zur Fernbedienung hergestellt. Wenn Sie also mehrere scp-Befehle haben, müssen Sie dasselbe Passwort mehrmals eingeben.
Aus diesem Grund sollten Sie scp nicht in Skripten verwenden, die Sie unbeaufsichtigt ausführen möchten. Wenn Sie mehrere Konten auf mehreren Computern im Netzwerk haben, fällt es Ihnen außerdem schwer, sich eindeutige, sichere Passwörter für jeden zu merken.
Um dieses Problem zu lösen, müssen Sie den Standardauthentifizierungsmechanismus von OpenSSH auf ein schlüsselbasiertes System umstellen.
Schlüssel zum Erfolg
Standardmäßig verwendet OpenSSH nur Schlüssel zur Authentifizierung der Identität eines Servers, wenn ein Client zum ersten Mal auf einen neuen Remote-Computer trifft:
$ ssh admin@atlantis.remote.com Die Authentizität des Hosts „atlantis.remote.com (atlantis.remote.com)“ kann nicht festgestellt werden. Der Fingerabdruck des ECDSA-Schlüssels ist da:e8:a2:77:f4:e5:10:56:6d:d4:d2:dc:15:8e:91:22. Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (Ja/Nein)?Wenn Sie mit „Ja“ antworten, wird der Remote-Host zur Liste der bekannten Hosts hinzugefügt. Zusätzlich zur Authentifizierung des Clients durch den Server, indem er nach einem Passwort fragt, authentifiziert der Client den Server auch mithilfe eines Schlüssels.
Ebenso können auch Sie sich einen Schlüsselbund besorgen, um Ihre Identität nachzuweisen. OpenSSH verwendet ein Schlüsselpaar, um Ihre Identität nachzuweisen und eine sichere Verbindung zu einem Remote-Server herzustellen. Der private Schlüssel ist nur für Sie sichtbar und wird von Ihrem OpenSSH-Client verwendet, um Ihre Identität gegenüber Servern nachzuweisen. Dann gibt es noch den öffentlichen Schlüssel, den Sie unter allen Ihren Konten auf allen Remote-Rechnern aufbewahren sollten, zu denen Sie eine SSH-Verbindung herstellen möchten.
Um einen Schlüssel zu erstellen, geben Sie auf Ihrem Client Folgendes ein:
$ ssh-keygen Generiert ein öffentliches/privates RSA-Schlüsselpaar. Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/home/bodhi/.ssh/id_rsa): Geben Sie die Passphrase ein (leer für keine Passphrase): Geben Sie dieselbe Passphrase erneut ein: Ihre Identifikation wurde in /home/bodhi/.ssh/id_rsa gespeichert. Ihr öffentlicher Schlüssel wurde in /home/bodhi/.ssh/id_rsa.pub gespeichert.Denken Sie daran, die Passphrase nicht leer zu lassen und notieren Sie sich den Speicherort der Schlüssel. Die Datei „id_rsa“ kann nur von Ihrem Konto gelesen werden und ihr Inhalt wird mit der Passphrase verschlüsselt, die Sie bei der Generierung angegeben haben.
Der nächste Schritt besteht darin, den öffentlichen Schlüssel auf den Remote-Server zu kopieren. Angenommen, Sie möchten sich beim Benutzer „admin“ auf dem Remote-Computer namens „atlantis.remote.com“ anmelden, können Sie die Tasten mit einem einzigen Befehl verschieben:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub admin@atlantis.remote.com admin@atlantis.remote.coms Passwort:Nachdem Sie die Passphrase für Ihren privaten Schlüssel angegeben haben, wird der öffentliche Schlüssel automatisch am richtigen Ort auf dem Remote-Server abgelegt, standardmäßig in der Datei „~/.ssh/authorized_keys“.
Wenn Sie nun eine SSH-Verbindung zum Remote-Computer herstellen, werden Sie zur Eingabe Ihrer Passphrase aufgefordert. Der einzige Vorteil der Verwendung von Schlüsseln besteht darin, dass Sie sich nicht mit einem unverschlüsselt übertragenen Passwort authentifizieren müssen, sondern dass der Remote-Server und Ihr Client Ihre Identität anhand der Schlüssel ermitteln.
Außerdem können Sie jetzt mit derselben Passphrase per SSH auf mehrere Remote-Rechner zugreifen, sofern diese Remote-Rechner über Ihren öffentlichen Schlüssel verfügen. Sie müssen sich also nicht mehrere Passwörter merken.
Sie können jedoch immer noch keine Skripte ausführen, ohne wegen Passphrasen unterbrochen zu werden.
SSH-Agent zur Rettung
OpenSSH bündelt ein Tool namens ssh-agent, das Ihre privaten Schlüssel im Speicher behält. Sobald ein Agent ausgeführt wird, werden Sie nicht mehr zur Eingabe von Passphrasen aufgefordert, sondern die SSH-Clients interagieren mit dem Agenten.
Sie können den Agenten mit „ssh-agent /bin/bash“ starten, vorausgesetzt, Sie verwenden die Bash-Shell.
Alle Befehle, die Zugriff auf Ihre privaten OpenSSH-Schlüssel erfordern, werden vom Agenten abgefangen und beantwortet.
Wenn der Agent ausgeführt wird, müssen Sie ihn mit Ihren Schlüsseln ausstatten. Dies erfolgt durch Aufrufen des Programms „ssh-add“, das standardmäßig die Schlüssel aus der Standardidentitätsdatei (~/.ssh/id_rsa) lädt.
$ ssh-add Passphrase für /home/bodhi/.ssh/id_rsa eingeben: Identität hinzugefügt: /home/bodhi/.ssh/id_rsa (/home/bodhi/.ssh/id_rsa)Wenn Sie sich jetzt mit „ssh admin@atlantis.remote.com“ am Remote-Computer anmelden, ist die Eingabe der Passphrase nicht mehr erforderlich!
Ebenso können scp und sftp auch eine Verbindung zu den Remote-Hosts herstellen, ohne Sie jemals nach einer Passphrase zu fragen. So können Sie jetzt Skripts planen und ausführen, die Dateien auf einem Remote-Computer automatisch bearbeiten.
Auch jetzt, wo Sie Schlüssel verwenden, ist es eine gute Idee, die Authentifizierung über Passwörter zu deaktivieren. Bearbeiten Sie dazu die Konfigurationsdatei des Remote-Servers (/etc/ssh/.sshd_config) und ändern Sie den Parameter „PasswordAuthentication“ von „yes“ auf „no“. Wenn von nun an jemand versucht, eine Verbindung zu Ihrem SSH-Dienst herzustellen, der keinen öffentlichen Schlüssel auf dem Server hat, wird ihm der Zugriff verweigert, ohne dass die Anmeldeaufforderung überhaupt angezeigt wird.
Schreibe einen Kommentar