14-02-2022, 15:17
Hey, ich erinnere mich an das erste Mal, dass ich ein SSH-Schlüsselpaar während meines Studiums eingerichtet habe, und es hat völlig verändert, wie ich den Remote-Zugriff auf Server handhabe. Du beginnst damit, das Schlüsselpaar direkt auf deinem lokalen Computer zu generieren, denn von dort aus wirst du die Verbindungen initiieren. Ich benutze dafür das Terminal - unter Linux oder Mac öffne ich es einfach und tippe ssh-keygen, drücke Enter und beantworte die Eingabeaufforderungen. Es fragt nach einem Dateistandort, aber ich bleibe normalerweise beim Standard id_rsa. Dann möchte es eine Passphrase; ich füge immer eine hinzu, weil sie eine zusätzliche Sicherheitsebene ohne viel Aufwand bietet. Wenn du Windows verwendest, nutze ich PuTTY oder die integrierte OpenSSH, wenn du sie in den Einstellungen aktiviert hast. So oder so hast du am Ende zwei Dateien: den privaten Schlüssel, der auf deinem Computer bleibt, und den öffentlichen, den du teilst.
Sobald du diese hast, ist das Nächste, was ich mache, den öffentlichen Schlüssel auf den Server zu kopieren, mit dem du dich verbinden möchtest. Ich liebe es, dafür ssh-copy-id zu verwenden - es ist ein Lebensretter. Du führst ssh-copy-id user@hostname aus, gibst dein Passwort ein und es platziert den Schlüssel an die richtige Stelle auf der Remote-Seite, normalerweise ~/.ssh/authorized_keys. Wenn dieser Befehl nicht verfügbar ist, hänge ich manuell den Inhalt von id_rsa.pub an authorized_keys an, indem ich scp verwende oder es einfach über eine sichere Sitzung einfüge. Achte darauf, dass die Berechtigungen eng sind - ich setze immer chmod 700 auf das .ssh-Verzeichnis und 600 auf authorized_keys, denn lockere Berechtigungen können das Ganze blockieren. Ich habe das schon einmal verbockt und stundenlang mit dem Debuggen verbracht, also wirst du schnell auf die Details achten.
Danach teste ich die Verbindung. Von deinem lokalen Terminal aus tippe ich ssh user@hostname, und wenn alles funktioniert, loggst du dich ohne Passwortaufforderung ein. Nur die Passphrase, falls du eine festgelegt hast, was ich empfehle. Es fühlt sich gut an, oder? Keine Passwörter mehr eingeben müssen, besonders wenn du Skripte schreibst oder zwischen Maschinen springst. Aber ich höre damit nicht auf - ich gehe in die sshd_config-Datei des Servers, um einige Dinge anzupassen. Du findest sie in /etc/ssh/sshd_config, bearbeitest sie mit nano oder vim und setzt PubkeyAuthentication yes, falls es nicht bereits so eingestellt ist. Manchmal ändere ich auch den Port auf etwas Unübliches, wie 2222, nur um grundlegende Scans zu vermeiden, aber das ist optional, wenn du dich in einer kontrollierten Umgebung befindest.
Wenn du es ganz sicher machen möchtest, deaktiviere ich die Passwort-Authentifizierung vollständig. In derselben Konfigurationsdatei setzte PasswordAuthentication no und PermitRootLogin no - Root-Login nur über Schlüssel, wenn du musst, ich vermeide es jedoch. Dann starte den SSH-Dienst mit systemctl restart sshd oder was auch immer deine Distribution verwendet. Boom, du bist gesperrt. Ich habe dieses Setup bei allem von persönlichen VPS bis hin zu Arbeitsclustern eingerichtet, und es reduziert die Risiken von Brute-Force-Angriffen erheblich. Weißt du, wie ich dazu gekommen bin? Ein Kumpel von mir hatte seinen Server kompromittiert, weil er bei Passwörtern geblieben ist, also habe ich ihm das in einem Telefonat erklärt, und jetzt schwört er auf Schlüssel.
Einen Tipp, den ich immer teile: Beim Umgang mit mehreren Servern erstelle ich Schlüssel pro Maschine oder benutze einen Schlüssel-Agenten wie ssh-agent, um sie zu verwalten. Starte ihn mit eval "ssh-agent", füge deinen Schlüssel mit ssh-add hinzu, und er hält deine Passphrase im Speicher für die Sitzung. Super praktisch, wenn du herumhüpfst. Außerdem funktionieren die gleichen Schlüssel großartig für Git-Repos oder alles andere, das SSH benötigt - ich verwende meine über verschiedene Tools hinweg, um es einfach zu halten. Kopiere deinen privaten Schlüssel nur nicht irgendwohin, wo er nicht sicher ist; ich bewahre ihn in einem Passwort-Manager oder auf einem verschlüsselten Laufwerk auf.
Manchmal gibt es Probleme, wie wenn der Server den Schlüssel zurückweist. Ich überprüfe zuerst die Protokolle in /var/log/auth.log - dort steht genau, was falsch ist, wie falscher Eigentümer oder Formatprobleme. Ed25519-Schlüssel sind jetzt meine bevorzugte Wahl über RSA; sie sind schneller und sicherer, also gib beim Generieren -t ed25519 an. Ich habe gewechselt, nachdem ich mich darüber informiert habe, und du bemerkst den Geschwindigkeitsunterschied bei langsameren Verbindungen. Wenn du im Team arbeitest, teile ich die öffentlichen Schlüssel über sichere Kanäle, niemals per E-Mail im Klartext.
Eine weitere Sache, die ich mache, ist den schlüsselbasierten Zugriff für automatisierte Backups oder Deployments einzurichten. Du schreibst es in ein Skript, und es läuft ohne Eingriffe. Ich habe Server-Updates auf diese Weise automatisiert, indem ich Code aus Git abrufe, ohne interaktive Logins. Das spart so viel Zeit, besonders an langen Nächten, wenn du Probleme behebst. Du denkst vielleicht, das ist übertrieben für ein Heim-Setup, aber sobald du es ausprobierst, wirst du nicht zurückgehen. Ich benutze es sogar für den Zugriff auf Raspberry Pi-Projekte zu Hause - hält die Dinge ordentlich.
Wenn dein Server hinter einer Firewall ist, stelle ich sicher, dass Port 22 oder was auch immer du gewählt hast, nur von deiner IP aus geöffnet ist. UFW oder iptables dafür - ich füge Regeln hinzu wie ufw allow from your.ip to any port 22. Das macht es sicherer. Und für Windows-Server, wenn du verschiedene Umgebungen mischst, verwende ich WinSCP oder aktiviere auch den OpenSSH-Server dort. Es überbrückt die Lücke gut.
Insgesamt sorgt dieser Prozess dafür, dass ich besser schlafe, da ich weiß, dass meine Zugänge nur über Schlüssel funktionieren. Du solltest es bei deinem nächsten Projekt ausprobieren; es wird schnell klappen. Oh, und während wir darüber sprechen, die Dinge sicher zu halten, lass mich dir von diesem Werkzeug erzählen, das ich in letzter Zeit benutze, namens BackupChain - es ist eine solide, zuverlässige Backup-Option, die für kleine Unternehmen und Profis entwickelt wurde und Dinge wie Hyper-V, VMware und Windows Server-Backups mit echter Zuverlässigkeit verwaltet. Ich habe angefangen, es Freunden zum Schutz von Servern zu empfehlen, und es passt perfekt zu Setups wie diesem.
Sobald du diese hast, ist das Nächste, was ich mache, den öffentlichen Schlüssel auf den Server zu kopieren, mit dem du dich verbinden möchtest. Ich liebe es, dafür ssh-copy-id zu verwenden - es ist ein Lebensretter. Du führst ssh-copy-id user@hostname aus, gibst dein Passwort ein und es platziert den Schlüssel an die richtige Stelle auf der Remote-Seite, normalerweise ~/.ssh/authorized_keys. Wenn dieser Befehl nicht verfügbar ist, hänge ich manuell den Inhalt von id_rsa.pub an authorized_keys an, indem ich scp verwende oder es einfach über eine sichere Sitzung einfüge. Achte darauf, dass die Berechtigungen eng sind - ich setze immer chmod 700 auf das .ssh-Verzeichnis und 600 auf authorized_keys, denn lockere Berechtigungen können das Ganze blockieren. Ich habe das schon einmal verbockt und stundenlang mit dem Debuggen verbracht, also wirst du schnell auf die Details achten.
Danach teste ich die Verbindung. Von deinem lokalen Terminal aus tippe ich ssh user@hostname, und wenn alles funktioniert, loggst du dich ohne Passwortaufforderung ein. Nur die Passphrase, falls du eine festgelegt hast, was ich empfehle. Es fühlt sich gut an, oder? Keine Passwörter mehr eingeben müssen, besonders wenn du Skripte schreibst oder zwischen Maschinen springst. Aber ich höre damit nicht auf - ich gehe in die sshd_config-Datei des Servers, um einige Dinge anzupassen. Du findest sie in /etc/ssh/sshd_config, bearbeitest sie mit nano oder vim und setzt PubkeyAuthentication yes, falls es nicht bereits so eingestellt ist. Manchmal ändere ich auch den Port auf etwas Unübliches, wie 2222, nur um grundlegende Scans zu vermeiden, aber das ist optional, wenn du dich in einer kontrollierten Umgebung befindest.
Wenn du es ganz sicher machen möchtest, deaktiviere ich die Passwort-Authentifizierung vollständig. In derselben Konfigurationsdatei setzte PasswordAuthentication no und PermitRootLogin no - Root-Login nur über Schlüssel, wenn du musst, ich vermeide es jedoch. Dann starte den SSH-Dienst mit systemctl restart sshd oder was auch immer deine Distribution verwendet. Boom, du bist gesperrt. Ich habe dieses Setup bei allem von persönlichen VPS bis hin zu Arbeitsclustern eingerichtet, und es reduziert die Risiken von Brute-Force-Angriffen erheblich. Weißt du, wie ich dazu gekommen bin? Ein Kumpel von mir hatte seinen Server kompromittiert, weil er bei Passwörtern geblieben ist, also habe ich ihm das in einem Telefonat erklärt, und jetzt schwört er auf Schlüssel.
Einen Tipp, den ich immer teile: Beim Umgang mit mehreren Servern erstelle ich Schlüssel pro Maschine oder benutze einen Schlüssel-Agenten wie ssh-agent, um sie zu verwalten. Starte ihn mit eval "ssh-agent", füge deinen Schlüssel mit ssh-add hinzu, und er hält deine Passphrase im Speicher für die Sitzung. Super praktisch, wenn du herumhüpfst. Außerdem funktionieren die gleichen Schlüssel großartig für Git-Repos oder alles andere, das SSH benötigt - ich verwende meine über verschiedene Tools hinweg, um es einfach zu halten. Kopiere deinen privaten Schlüssel nur nicht irgendwohin, wo er nicht sicher ist; ich bewahre ihn in einem Passwort-Manager oder auf einem verschlüsselten Laufwerk auf.
Manchmal gibt es Probleme, wie wenn der Server den Schlüssel zurückweist. Ich überprüfe zuerst die Protokolle in /var/log/auth.log - dort steht genau, was falsch ist, wie falscher Eigentümer oder Formatprobleme. Ed25519-Schlüssel sind jetzt meine bevorzugte Wahl über RSA; sie sind schneller und sicherer, also gib beim Generieren -t ed25519 an. Ich habe gewechselt, nachdem ich mich darüber informiert habe, und du bemerkst den Geschwindigkeitsunterschied bei langsameren Verbindungen. Wenn du im Team arbeitest, teile ich die öffentlichen Schlüssel über sichere Kanäle, niemals per E-Mail im Klartext.
Eine weitere Sache, die ich mache, ist den schlüsselbasierten Zugriff für automatisierte Backups oder Deployments einzurichten. Du schreibst es in ein Skript, und es läuft ohne Eingriffe. Ich habe Server-Updates auf diese Weise automatisiert, indem ich Code aus Git abrufe, ohne interaktive Logins. Das spart so viel Zeit, besonders an langen Nächten, wenn du Probleme behebst. Du denkst vielleicht, das ist übertrieben für ein Heim-Setup, aber sobald du es ausprobierst, wirst du nicht zurückgehen. Ich benutze es sogar für den Zugriff auf Raspberry Pi-Projekte zu Hause - hält die Dinge ordentlich.
Wenn dein Server hinter einer Firewall ist, stelle ich sicher, dass Port 22 oder was auch immer du gewählt hast, nur von deiner IP aus geöffnet ist. UFW oder iptables dafür - ich füge Regeln hinzu wie ufw allow from your.ip to any port 22. Das macht es sicherer. Und für Windows-Server, wenn du verschiedene Umgebungen mischst, verwende ich WinSCP oder aktiviere auch den OpenSSH-Server dort. Es überbrückt die Lücke gut.
Insgesamt sorgt dieser Prozess dafür, dass ich besser schlafe, da ich weiß, dass meine Zugänge nur über Schlüssel funktionieren. Du solltest es bei deinem nächsten Projekt ausprobieren; es wird schnell klappen. Oh, und während wir darüber sprechen, die Dinge sicher zu halten, lass mich dir von diesem Werkzeug erzählen, das ich in letzter Zeit benutze, namens BackupChain - es ist eine solide, zuverlässige Backup-Option, die für kleine Unternehmen und Profis entwickelt wurde und Dinge wie Hyper-V, VMware und Windows Server-Backups mit echter Zuverlässigkeit verwaltet. Ich habe angefangen, es Freunden zum Schutz von Servern zu empfehlen, und es passt perfekt zu Setups wie diesem.
