Führen Sie automatisierte Skripts über SSH aus
Wir haben Ihnen gezeigt, wie Sie mit SSH Dateien sicher übertragen können. Aber es gibt ein großes Problem mit dem Standardverhalten von SSH. Sie sind nur mit dem Remotecomputer verbunden, nachdem Sie das Kennwort manuell eingegeben haben, das es für alle Aufgaben ausschließt, die Sie unbeaufsichtigt ausführen möchten. Oder tut es?
Hier ist ein kurzer Überblick darüber, wie die OpenSSH CLI-Tools (scp und sftp) funktionieren, damit Sie das Problem besser einschätzen können. Wenn Sie Dateien vom oder zum Remote-Host kopieren möchten, können Sie scp verwenden, das automatisch eine SSH-Verbindung zum Remote-Host einleitet. Jedes Mal, wenn Sie einen scp-Befehl ausführen, wird eine neue Verbindung zur Remote hergestellt. Wenn Sie also mehrere scp-Befehle haben, würden Sie dasselbe Passwort mehrmals eingeben.
Aus diesem Grund sollten Sie scp nicht in Skripts verwenden, die unbeaufsichtigt ausgeführt werden sollen. Es gibt auch die Tatsache, dass Sie, wenn Sie mehrere Konten auf mehreren Computern im Netzwerk haben, Schwierigkeiten haben, sich eindeutige, starke Kennwörter für jeden zu merken.
Um dieses Problem zu beheben, müssen Sie den standardmäßigen Authentifizierungsmechanismus von OpenSSH auf ein schlüsselbasiertes System umstellen.
Schlüssel zum Erfolg
Standardmäßig verwendet OpenSSH nur Schlüssel, um die Identität eines Servers zu authentifizieren, wenn ein Client zum ersten Mal einen neuen Remote-Computer findet:
$ ssh [email protected] Die Authentizität des Host 'atlantis.remote.com (atlantis.remote.com) kann nicht festgestellt werden. Der ECDSA-Schlüsselfingerabdruck 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 zum Server, der den Client authentifiziert, indem er nach einem Kennwort fragt, authentifiziert der Client den Server auch mithilfe eines Schlüssels.
In ähnlicher Weise können Sie sich auch eine Reihe von Schlüsseln beschaffen, um Ihre Identität zu beweisen. OpenSSH verwendet ein Paar Schlüssel, um Ihre Identität zu beweisen und eine sichere Verbindung zu einem entfernten Server herzustellen. Der private Schlüssel ist nur für Sie gedacht und wird von Ihrem OpenSSH-Client verwendet, um Ihre Identität gegenüber Servern nachzuweisen. Dann gibt es den öffentlichen Schlüssel, den Sie unter all Ihren Konten auf allen Remote-Rechnern, in denen Sie SSH betreiben wollen, aufbewahren wollen.
Um einen Schlüssel zu erstellen, geben Sie auf Ihrem Client Folgendes ein:
$ ssh-keygen Generieren eines öffentlichen / privaten RSA-Schlüsselpaars. 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" ist nur für Ihr Konto lesbar und ihr Inhalt wird mit der Passphrase verschlüsselt, die Sie während 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-Rechner "atlantis.remote.com" anmelden, können Sie die Schlüssel mit einem einzigen Befehl verschieben:
$ ssh-copy-id -i ~ / .ssh / id_rsa.pub [email protected] Passwort von [email protected]:
Nachdem Sie die Passphrase für Ihren privaten Schlüssel angegeben haben, wird der öffentliche Schlüssel automatisch an der richtigen Stelle auf dem Remote-Server platziert, der standardmäßig die Datei "~ / .ssh / authorized_keys" ist.
Wenn Sie nun auf den Remote-Computer zugreifen, werden Sie zur Eingabe Ihrer Passphrase aufgefordert. Der einzige Vorteil der Verwendung von Schlüsseln besteht darin, dass der Remote-Server und Ihr Client Ihre Identität anhand der Schlüssel festlegen, anstatt Sie mit einem unverschlüsselt übertragenen Kennwort zu authentifizieren.
Außerdem können Sie nun mit derselben Passphrase in mehrere Remote-Boxen wechseln, solange diese Remote-Maschinen Ihren öffentlichen Schlüssel haben. Sie müssen sich also nicht mehrere Passwörter merken.
Sie können jedoch weiterhin keine Skripts ausführen, ohne für Passphrasen unterbrochen zu werden.
Siehe auch : So aktivieren Sie die Zwei-Faktor-Authentifizierung für die SSH-Verbindung
SSH-Agent zur Rettung
OpenSSH bündelt ein Tool namens ssh-agent, das Ihre privaten Schlüssel im Speicher hält. Sobald ein Agent ausgeführt wird, werden die SSH-Clients mit dem Agenten interagieren, anstatt Sie nach Passphrasen zu fragen.
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 geschieht durch Aufruf des Programms "ssh-add", das standardmäßig die Schlüssel aus der Standard-Identitä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 nun mit " ssh [email protected]
" am entfernten Computer ssh [email protected]
, dürfen Sie die Passphrase nicht ssh [email protected]
!
Auf ähnliche Weise können scp und sftp auch eine Verbindung zu den Remote-Hosts herstellen, ohne dass Sie jemals nach einer Passphrase gefragt werden. Sie können 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 jetzt 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 er die Anmeldeaufforderung sehen muss.
Bildnachweis: Karunakar Rayker