Tags: Amazon EC2, Linux, SSH
Nach dem Starten eines neuen virtuellen Servers ("Instanz") unter AWS EC2 muss man diesen konfigurieren. Dazu kann man sich, sofern es die Routing-Konfiguration im VPC zulässt, via SSH mit der Konsole verbinden und Updates oder neue Pakete installieren, Benutzer einrichten oder die Netzwerkkonfiguration anpassen.
In Devops-Szenarien, wie sie im Cloud-Computing üblich sind, wird man alle im Folgenden beschriebenen Schritte entweder direkt beim Start der Instanz mittels cloudinit oder über ein Konfigurations-Management wie Puppet oder Chef veranlassen.
Zudem wird man in der Praxis EC2-Ressourcen meist automatisiert (Script-basiert) oder API-gesteuert über das SDK einer bestimmten Programmiersprache erzeugen und dabei konfigurieren. Für das Verständnis der wichtigsten Konfigurationsmaßnahmen ist das manuelle Vorgehen aber hilfreich, wie ich es im hier am Beispiel von Amazon Linux erläutere.
Software-Installation
Die Basisversion von Amazon Linux (oder Amazon Linux 2) bringt bereits zahlreiche Software-Pakete und Dienstprogramme mit. Darüber hinaus stehen viele weitere Anwendungen in verschiedenen Repositories zur Verfügung.
Das bei Linux-Distributionen der Red-Hat-Familie, zu der auch Amazon Linux zählt, sehr populäre Epl-Repo ist bereits konfiguriert und muss nur aktiviert werden. Man kann aber auch völlig neue Repositorien einbinden oder Pakete aus Quellcode selbst erstellen.
Benutzerkonten einrichten
Bei Instanzen auf Basis von Amazon Linux existiert per Default nur ein Benutzerkonto mit dem Namen ec2-user. Es erlaubt eine Anmeldung ausschließlich via RSA-Key-Pair und verfügt über Superuser-Privilegien. Selbstverständlich kann man bei Bedarf weitere Nutzerkonten anlegen, zum Beispiel mit
sudo adduser <NeuerNutzer>
Der Befehl erstellt außerdem eine Gruppe und ein Stammverzeichnis für das neue Benutzerkonto. Bei dieser Variante wird nicht nach einem Passwort für den neuen User gefragt:
sudo adduser <NeuerNutzer> --disabled-password
Mit
sudo su - <NeuerNutzer>
wechselt man zum neuen Nutzer, wodurch sich der Prompt zu <neunutzer@Private-IPv4-Adresse> ändert.
Dann legt man im Stammverzeichnis des neuen Nutzers ein verstecktes Verzeichnis .ssh an und setzt die Dateiberechtigungen mit chmod auf 700, damit nur der Eigentümer das Verzeichnis öffnen, lesen oder darin schreiben kann.
mkdir .ssh
chmod 700 .ssh
Ist das erledigt, dann erstellt man in dem Verzeichnis eine neue Datei authorized_keys mit der Dateiberechtigung 600 (nur der Eigentümer kann lesen und schreiben), denn ohne sie kann sich der neue Benutzer nicht anmelden.
Dann öffnet man authorized_keys mit einem Texteditor und trägt dort den öffentlichen Schlüssel des Schlüsselpaars, das verwendet werden soll, ein und speichert die Änderungen.
Netzwerk und Domäne
AWS weist jeder Instanz beim Start einen System-Hostname zu, der die private IPv4-Adresse in etwas anderer Schreibweise (Bindestriche) darstellt. Im Gegensatz dazu setzt sich der private DNS-Hostname aus der privaten IPv4-Adresse in Bindestrichschreibweise plus einem Domain-Teil zusammen.
Letzterer besteht aus dem Namen der Region plus einer Angabe für den Service wie compute bei EC2 und dem Kürzel internal, zum Beispiel ip-10-50-3-189.eu-central-1.compute.internal. Der System-Hostname wird auch in Kombination mit dem Nutzernamen als Prompt für die Shell verwendet.
Wie schon im Artikel zur Virtual Private Cloud (VPC) erläutert, ändern sich nach jedem Stopp oder Neustart einer Instanz die öffentliche IPv4-Adresse (außer bei Verwendung einer EIP Elastic), der öffentliche DNS-Name, der Hostname und die Shell-Anzeige.
Bei einer VPC-gestarteten Instanz (im Gegensatz zu EC2-Classic) bleiben allerdings die private IPv4-Adresse, der private DNS-Hostname und System-Hostname auch nach dem Neustart erhalten. Gelegentlich kann es sinnvoll sein, den System-Hostname zu ändern, etwa wenn der Nutzer für die IP-Adresse seiner Instanz einen öffentlichen DNS-Namen registriert hat.
Hier würde man den System-Hostname so einstellen, dass sich die Instance als Teil der angegebenen Domäne identifiziert, wodurch sich dann auch die Shell-Anzeige so ändert, dass der erste Teil dieses Namens anstelle des von AWS zur Verfügung gestellten Hostnamens angezeigt wird.
Wenn man also einen öffentlichen DNS-Namen registriert hat, kann man bei Amazon Linux 2 (das für den Systemstart sytemd verwendet) das Kommando hostnamectl zum Festlegen des Hostnamens verwenden, und zwar durch Eingabe eines vollqualifizierten Domänennamens:
sudo hostnamectl set-hostname <meinserver.meinedomaine.com>
Bei Amazon Linux AMI muss man wie bei allen älteren Red-Hat-Distributionen (RHEL 6, CentOS 6 usw.) in der Konfigurationsdatei /etc/sysconfig/network den Eintrag HOSTNAME entsprechend anpassen und die Instanz dann neu starten.
Täglich Know-how für IT-Pros mit unserem Newsletter
Thomas Drilling arbeitet ist seit fast 30 Jahren selbständig in der IT-Welt sowohl als Consultant, als auch als Redakteur, Buchautor und Journalist für viele ehemalige und aktuelle IT-Magazine sowie Blogs.
Aktuell bestätigt sich Thomas schwerpunktmäßig als IT-Trainer für Cloud-Computing in den Bereichen Microsoft Azure, Amazon Web Services und VMware.
Thomas ist zertifizierter Microsoft-Trainer für nahe das gesamte Portfolio an Microsoft Azure Trainings. Thomas ist außerdem zertifizierter Microsoft Azure Solutions Architect Expert sowie VMware Certified Professional und wurde von VMware in den Jahren 2016 bis 2022 mit dem Blogger-Status vExpert ausgezeichnet.
Thomas führt aktuell jeden Monat zwei selbstkonziperte 4-tägigen Grundlagenkurse in Cloud Computing mit Azure durch, die sich inhaltlich bewusst von den Microsft-Kursen abheben und vorzuweise als Bootcamp in eine besonderen Lokation stattfinden. Optional kann aber aber auch remote via Microsoft Teams teilgenommen werden.
Das aktuelle Trainingsprogramm findet sich unter Azure-Trainings. Weitere Informationen und Anmeldung über sein Azure-Blog.
Verwandte Beiträge
- Dateien zwischen Windows und Linux kopieren mit SCP und PowerShell
- AWS EC2: Patches für Amazon Linux einspielen mit yum
- EC2: Amazon Machine Images nutzen, AMI selbst erstellen
- Elastic Compute Cloud (EC2): Virtuelle Maschinen auf Basis von AMIs einrichten
- PowerShell Core 6.0 für Windows, Mac und Linux offiziell verfügbar
Weitere Links
- SNMP, WMI, SSH: Warum eine effiziente Netzwerküberwachung nicht ohne Zugangsdaten auskommt
- Technisches Webinar: Privilegierte Konten durch sichere Passwörter schützen, Kennwörter automatisch zurücksetzen, SSH-Keys regelmäßig erneuern
- StarWind: Hochverfügbaren Speicher mit virtueller Storage Appliance (VSA) einrichten