SSH

Übersetzung(en): Deutsch – English – Français – Italiano – Español – Português Brasileiro

ToDo: merge (and translate) this page and the french one (more complete)

Einleitung

SSH steht für Secure Shell und ist ein Protokoll für Secure remote login und andere sichere Netzwerkdienste über ein unsicheres Netzwerk1. Siehe Wikipedia – Secure Shell für allgemeinere Informationen und ssh, lsh-client oder dropbear für die SSH-Softwareimplementierungen, von denen OpenSSH die beliebteste und am weitesten verbreitete ist2. SSH ersetzt das unverschlüsselte Telnet, rlogin und rsh und fügt viele Funktionen hinzu.

In diesem Dokument verwenden wir die OpenSSH-Befehlssuite, es wird auch davon ausgegangen, dass die folgenden zwei Variablen definiert sind:

remote_host=<the remote computer>remote_user=<your user name on $remote_host>

Wenn Sie also die folgenden Rezepte verwenden möchten, legen Sie diese Variablen zunächst auf den Namen des Remotecomputers und den Benutzernamen auf diesem Remotecomputer fest. Dann sollte das Ausschneiden und Einfügen der folgenden Befehle funktionieren. remote_host kann auch eine IP-Adresse sein.

Installation

Installation des Clients

Normalerweise ist der Client standardmäßig installiert. Wenn nicht, genügt es, als root zu laufen:

apt install openssh-client

Installation des Servers

Der Server ermöglicht eine Remote-Verbindung und wird installiert, indem er als root ausgeführt wird:

apt install openssh-server

Konfigurationsdateien

Die Hauptkonfigurationsdateien befinden sich im Verzeichnis /etc/ssh :

  • ssh_config : Client-Konfigurationsdatei

  • sshd_config : Server-Konfigurationsdatei

Zusätzlich enthält dieses Verzeichnis die privaten/öffentlichen Schlüsselpaare, die Ihren Host identifizieren :

  • ssh_host_dsa_key
  • ssh_host_dsa_key.kneipe
  • ssh_host_rsa_key
  • ssh_host_rsa_key.pub

Seit OpenSSH 5.73 ist ein neues privates/öffentliches Schlüsselpaar verfügbar:

  • ssh_host_ecdsa_key
  • ssh_host_ecdsa_key.pub

Seit OpenSSH 6.54 ist ein neues privates/öffentliches Schlüsselpaar verfügbar:

  • ssh_host_ed25519_key
  • ssh_host_ed25519_key.pub

Hostschlüssel regenerieren

rm /etc/ssh/ssh_host_*dpkg-reconfigure openssh-server

Remote-Login

Mit Passwort

Wenn Sie sich als Benutzer $remote_user bei $remote_host anmelden möchten, geben Sie einfach

ssh $remote_user@$remote_host

ein und geben Sie dann Ihr Passwort ein.

Wenn die Benutzernamen auf dem lokalen und dem Remotecomputer identisch sind, können Sie den $remote_user@-part löschen und einfach

ssh $remote_host

Wenn Sie sich zum ersten Mal am Remotecomputer anmelden, werden Sie von ssh gefragt, ob Sie sicher sind, dass Sie eine Verbindung zum Remotecomputer herstellen möchten. Antwort ‚Ja‘ Nachdem Sie den Fingerabdruck des Remote-Computers überprüft haben, geben Sie Ihr Passwort ein und ssh verbindet Sie mit dem Remote-Host.

Gemeinsame Schlüssel verwenden

Eine der Funktionen von ssh besteht darin, ein Paar privater / öffentlicher Schlüssel zu verwenden, um eine Verbindung zu einem Remote-Host herzustellen. Auch bekannt als SSH-Schlüssel. Mit dieser Methode können Sie sich bei einem Remote-Host anmelden, ohne jedes Mal Ihr Kennwort eingeben zu müssen. Dazu müssen Sie ein Paar privater / öffentlicher Schlüssel auf Ihrem lokalen Computer generieren und den öffentlichen Schlüssel auf dem Remote-Host hinterlegen.

Um den Schlüssel zu generieren, verwenden Sie das Programm ssh-keygen wie folgt

ssh-keygen -t rsa

Dieses Programm generiert ein Paar privater /öffentlicher Schlüssel im Verzeichnis ~/.ssh. Das Programm fragt zuerst nach den Zieldateien für die Schlüssel, die sich standardmäßig in ~ / befinden.ssh. Danach wird eine Passphrase angefordert.

Hinweis: Wir empfehlen, die Passphrase nicht leer zu lassen. Ein Angreifer, der an Ihren privaten Schlüssel gelangt, kann sich andernfalls mit den Hosts verbinden, auf denen Sie Ihren öffentlichen Schlüssel hinterlegt haben, da die Passphrase leer ist. Wählen Sie eine lange und komplexe Passphrase.

Ihr privater Schlüssel ist id_rsa (geben Sie ihn nicht an dritte weiter), Ihr öffentlicher Schlüssel ist id_rsa.Pub.

Sie kopieren Ihren öffentlichen Schlüssel mit dem Befehl ssh-copy-id

ssh-copy-id -i ~/.ssh/id_rsa.pub $remote_user@$remote_host

auf einen Remote-Host. Sobald Sie fertig sind, werden Sie mit dem Remote-Host verbunden. Im Falle einer neuen Verbindung wird die Passphrase während der gesamten Sitzung nicht erneut abgefragt.

Schlüsselverwaltung

Mit GUI

Optional ist seahorse eine GNOME-Anwendung, die Verschlüsselungsschlüssel und Passwörter einfach über eine intuitive grafische Benutzeroberfläche (GUI) verwaltet. Seepferdchen ist in der Lage, verschiedene Operationen durchzuführen. Z. B. SSH- oder PGP-Schlüssel erstellen, konfigurieren und zwischenspeichern. Lesen Sie mehr.

Sichern

SSH-Server

Standardmäßig ist ein SSH-Server relativ sicher. Mit Hilfe einiger guter Praktiken, Konfigurationsoptionen und externer Dienstprogramme ist es möglich, es für ‚Roboter‘ und Cracker noch schwieriger zu machen

Gute Praktiken mit SSH-Server

  • /!\ Installieren Sie openssh-Server-Sicherheitsupdates so schnell wie möglich. Dies ermöglicht den Schutz vor bekannten Sicherheitslücken.

  • Aktivieren Sie die SSH-Schlüsselauthentifizierung nur mit Passwörtern / Passphrasen. Deaktivieren Sie die Authentifizierung nur mit Kennwort.

  • Erwägen Sie die Verwendung von fail2ban, einem Protokolldateimonitor, der eine IP-Adresse nach einer vordefinierten Anzahl fehlgeschlagener Anmeldeversuche automatisch sperrt. Das schützt automatisch vor Brute-Force-Angriffen.

  • Weitere gute Praktiken für die Verwendung von ssh unter https://lackof.org/taggart/hacking/ssh/

Konfigurationsmöglichkeiten

(!) Man sollte die Datei /etc/ssh/sshd_config bearbeiten, um die Parameter zu ändern und dann den SSH-Server mit

service ssh restart
  • Deaktivieren Sie die Verwendung von Passwörtern zur Authentifizierung (PasswordAuthentication no).

  • Deaktivieren Sie mit dem Root-Konto (PermitRootLogin nein).

  • Anmeldung nur für bestimmte Benutzer oder Gruppen zulassen (AllowUsers und AllowGroups)

{ i} Die Optionen AllowUsers und AllowGroups verbessern die Sicherheit eines SSH-Servers nicht. In bestimmten Fällen erlaubt ihre Verwendung jedoch, einem Brute-Force-Angriff etwas länger zu widerstehen.

Externe Dienstprogramme

  • fail2ban : Ermöglicht die automatische Blacklist von IPs, die versuchen, einen SSH-Server mit Hilfe von iptables Brute-Force zu erzwingen.

  • denyhosts : als fail2ban ermöglicht denyhosts, IP-Adressen zu blockieren, die versuchen, eine Verbindung zu ssh Brute-Force herzustellen. Im Gegensatz zu fail2ban verwendet es jedoch keine iptables, sondern die Datei /etc/hosts.leugnen.

SSH-Client

Bewährte Methoden mit SSH-Client

  • /!\ Installieren Sie openssh-client Security Updates so schnell wie möglich. Dies ermöglicht den Schutz vor bekannten Sicherheitslücken.

  • Verwenden Sie die SSH-Schlüsselauthentifizierung. Anstatt Passwort-Authentifizierung.

  • Fügen Sie Ihren SSH-Schlüsseln starke Passwörter / Passphrasen hinzu. Dies reduziert das Risiko von Brute-Force-Angriffen.

Zusätzliche Funktionen

Dateien in GUI anzeigen

In Dateimanagern wie Konqueror, Dolphin, Krusader und Midnight Commander können Sie mit FISH Dateien in einer GUI anzeigen, indem Sie:

fish://username@server_name_or_ip

Zusätzliche Befehle

scp

scp ist ein Befehlszeilenprogramm, mit dem Dateien zwischen zwei Computern übertragen werden können.

  • Datei senden:
scp $source_file $remote_user@$remote_host:$destination_file
  • Kopieren einer Datei auf den lokalen Computer:

scp $remote_user@$remote_host:$source_file $destination_file

sftp

Textmodus

Grafikmodus

clusterssh

ssh-agent und ssh-add

ssh-agent ist ein nützliches Dienstprogramm zum Verwalten privater Schlüssel und ihrer Passphrasen. Die meisten Desktop-Umgebungen in Debian sind bereits so eingerichtet, dass ssh-agent ausgeführt wird (über systemd User Services oder / etc/X11 /Xsession), Sie sollten es also nicht manuell starten müssen.

# Check if ssh-agent is runningenv | grep -i ssh

Sie müssen dem Agenten weiterhin mitteilen, dass er Ihre Schlüssel verwalten soll.

# List keys managed by the agentssh-add -l# Add your ssh keyssh-add ~/.ssh/your_private_key

Wenn Sie zum ersten Mal einen privaten Schlüssel benötigen, werden Sie zur Eingabe der Passphrase aufgefordert. ssh-agent merkt sich dann den Schlüssel, damit Ihre Passphrase nicht mehr gefragt wird.

keychain

Keychain, bereitgestellt durch das Paket keychain, ist ein Shell-Skript, mit dem der SSH-Agent in mehreren Sitzungen desselben Computers verwendet werden kann. Nach dem ersten Start erstellt ssh-agent einen permanenten Socket, der die Kommunikation mit ssh ermöglicht. Dieser Socket wird nur in der Umgebung der Sitzung referenziert, in der der Agent gestartet wurde. Keychain ermöglicht es, den Agenten zu erkennen und den Zugriff auf diesen Agenten auf andere Sitzungen zu übertragen; dies ermöglicht die Verwendung einer einzelnen Instanz von ssh-agent pro Benutzer auf einem Computer.

ssh-askpass

ssh-askpass ist ein Dienstprogramm, um die Frage nach dem Passwort eines privaten Schlüssels zu beantworten, wenn Sie es verwenden. Es gibt mehrere Implementierungen:

  • x11-ssh-askpass : Version für X11

  • kaskpass : Integration von ssh-askpass in die KDE-Umgebung

  • ssh-askpass-gnome : integration von ssh-askpass in die Gnome-Umgebung

libpam-usb

libpam-usb ist ein Dienstprogramm (nur bis Debian Jessie verfügbar), das die Authentifizierung mit einem USB-Stick ermöglicht. Dieses Paket enthält eine nützliche utilty: pamusb-agent. Sobald dieses Dienstprogramm korrekt konfiguriert ist, können Sie die auf dem USB-Stick vorhandenen SSH-Schlüssel laden, sobald er angeschlossen ist, und sie entladen, wenn er getrennt wird.

Remotebefehle

Wenn Sie nur einen Befehl auf dem Remotecomputer ausführen möchten, müssen Sie sich nicht anmelden. Sie können ssh beispielsweise anweisen, den Befehl ohne Anmeldung auszuführen,

ssh $remote_user@$remote_host 'ls *.txt'

listet alle Dateien mit Endung auf .txt auf dem Remote-Computer. Dies funktioniert mit einzelnen Tick-Anführungszeichen…‘ wie hier gezeigt, mit doppelten Anführungszeichen „…“ und ohne Anführungszeichen. Es kann jedoch Unterschiede zwischen diesen drei Fällen geben, die hier noch nicht dokumentiert sind.

SSH in Debian von einem anderen Betriebssystem

  • PuTTY ist eine Terminal-Emulator-Anwendung, die als Client für ssh fungieren kann. Es wird häufig von Windows-Benutzern verwendet.

  • Wikipedia hat Comparison_of_SSH_clients

Gute Praktiken der SSH-Nutzung

Sie müssen dies lesen: https://lackof.org/taggart/hacking/ssh/

Dieses Dokument fasst viele gute Praktiken zusammen, die normale SSH-Benutzer befolgen sollten, um die Sicherheit ihrer Konten (und der gesamten Maschine gleichzeitig) nicht zu gefährden.

Konfigurieren Sie Ihre ~/.ssh / config, um nur den richtigen Schlüssel zu senden.

Host master.debian.org User account IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes

Fehlerbehebung

OpenSSL-Version stimmt nicht überein. Gegen 1000105f gebaut, haben Sie 10001060

Wenn Sie beim Starten des SSH-Daemons eine Fehlermeldung wie diese erhalten, müssen Sie Folgendes ausführen:

apt install openssh-server openssh-client

Siehe auch Bug # 732940.

SSH hängt

Problem

Sie versuchen, SSH auf einen Remotecomputer zu übertragen. Aber während der SSH-Anmeldung hängt / friert die Sitzung unbegrenzt ein. Daher wird Ihnen die Eingabeaufforderung nicht angezeigt. Und Sie können keine SSH-Befehle verwenden :( Bei Verwendung des SSH-Debug-Modus hängt die Sitzung an dieser Zeile debug2: Kanal 0: open confirm rwindow 0 rmax 32768

Mögliche Ursache

Bei einigen Routern hinter NAT und bei Verwendung von OpenSSH. Während der Sitzungseinrichtung legt OpenSSH nach Angabe des Kennworts das Feld TOS (Type of Service) im IP-Datagramm fest. Der Router drosseln auf diese. Der Effekt ist, dass Ihre SSH-Sitzung auf unbestimmte Zeit hängt. Mit anderen Worten, SSH-Befehle oder -Verbindungen funktionieren selten oder gar nicht.

Auflösung mit IPQoS 0x00

Bis Ihr Routerhersteller seine Firmware repariert. Hier ist eine Option, um dieses Problem zu beheben:

  1. Überprüfen Sie, ob Ihre Openssh-Server- und Openssh-Client-Version 5.7 oder höher ist. Zum Beispiel sollte die folgende Auflösung mit Debian 7.11 Wheezy oder neuer funktionieren, da es mit OpenSSH Version 6.0 geliefert wird.

  2. Bearbeiten Sie eine der beiden folgenden Dateien unter:

    ~/.ssh/config

    oder

    /etc/ssh/ssh_config

    Hinweis: Die Konfigurationsdatei ist pro Benutzer und die ssh_config Datei ist für alle Benutzer und systemweit. Wenn Sie sich nicht sicher sind, bearbeiten Sie die entsprechende Benutzerkonfigurationsdatei.

    Dateiinhalt vor

    Host *

    Dateiinhalt nach

    Host * IPQoS 0x00
  3. Wenn Sie bereits Terminal- / Konsolenfenster geöffnet haben. Schließen Sie alle vollständig. Dadurch werden alle aktiven SSH-Sitzungen geschlossen.
  4. Sie müssen OpenSSH oder Debian nicht neu starten. Versuchen Sie erneut, SSH auf einen beliebigen Remote-Server zu übertragen. Es sollte funktionieren. Done Sie haben dieses Problem erfolgreich behoben :)

    Vielen Dank an Joe und Catmaker für diesen Tipp :)

    Zugehörige Dokumentation unter https://www.openssh.com/txt/release-5.7

Auflösung mit netcat

/!\ WARNUNG: Es wird empfohlen, diese andere Auflösung mit IPQoS 0x00 anstelle der Option netcat/ ProxyCommand nc %h %p zu verwenden. Weil IPQoS 0x00 die offizielle integrierte OpenSSH-Option ist. Auch IPQoS 0x00 ist eine direktere Möglichkeit, dieses Problem zu beheben, und möglicherweise eine sicherere Option. Weil IPQoS 0x00 die integrierte Verschlüsselung von SSH für sichere Übertragungen verwendet. Vergleichen Sie mit den nicht verschlüsselten Übertragungen von netcat. Quellen: 1 2. Wenn Sie die Option netcat / ProxyCommand nc % h %p verwenden, lesen Sie weiter.

Eine andere Möglichkeit, dieses SSH-Hängeproblem zu beheben, ist die Verwendung von ProxyCommand nc %h %p. Gehen Sie dazu wie oben beschrieben mit IPQoS 0x00 vor. Ersetzen Sie jedoch IPQoS 0x00 durch

ProxyCommand nc %h %p

SSH-Verbindung am Leben erhalten

Aus Sicherheitsgründen wird eine SSH-Verbindung standardmäßig nach einer festgelegten Zeit automatisch geschlossen. In einigen Fällen möchten Sie diese Verbindung jedoch offen halten. Wie Cloud-Speicher über SSH-Verbindung.

/!\ WARNUNG: Bevor Sie die Option SSH-Verbindung am Leben erhalten aktivieren. Es wird empfohlen, sowohl Ihren SSH-Client als auch Ihren SSH-Server zu sichern. Denn es besteht beispielsweise das Risiko, dass Ihre Benutzer ihre SSH-Sitzung offen lassen und ihren Computer unbeaufsichtigt und entsperrt lassen. Jeder kann sich diesem Computer nähern und dann diese offene SSH-Verbindung ausnutzen. Verwenden Sie beispielsweise den Befehl passwd und ändern Sie das Kennwort. Und somit Zugriff auf den Server erhalten. Mit anderen Worten, bevor Sie die Option SSH-Verbindung am Leben erhalten aktivieren, sollten Sie Ihr bestes Urteilsvermögen und gute Sicherheitspraktiken anwenden.

Für Debian 7.x server

Schritte, um die SSH-Verbindung am Leben zu erhalten.

Bearbeiten Sie auf dem SSH-Server die Datei /etc/ssh/sshd_config und fügen Sie am Ende dieser Datei Folgendes hinzu.

# Keep client SSH connection alive by sending every 300 seconds a small keep-alive packet to the server in order to use ssh connection. 300 seconds equal 5 minutes.ClientAliveInterval 300 # Disconnect client after 3333 "ClientAlive" requests. Format is (ClientAliveInterval x ClientAliveCountMax). In this example (300 seconds x 3333) = ~999,900 seconds = ~16,665 minutes = ~277 hours = ~11 days.ClientAliveCountMax 3333

Starten Sie als Root-Benutzer den SSH-Dienst neu:

service sshd restart

Bitte beachten Sie, dass auf neueren Debian-Systemen (z. B. Wheezy 7 mit aktuellen Updates ab Nov. 2015) funktioniert der obige Befehl nicht mehr und gibt den Fehler zurück:

sudo service sshd restartsshd: unrecognized service

Das Folgende funktioniert jedoch:

sudo service ssh restart Restarting OpenBSD Secure Shell server: sshd.

Siehe auch

  • bildschirm – Terminal Multiplexer mit VT100/ANSI Terminal Emulation

  • tmux – alternativer Terminalmultiplexer

Kategorienetzwerk Kategoriensoftware

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.