Difference between revisions of "Ssh"

From mxlinuxusers.de
Jump to navigation Jump to search
(ssh-Key-Erzeugung und -Übertragung ergänzt)
(ssh-add ergänzt)
Line 64: Line 64:
 
  ssh USER@RECHNER ls -l
 
  ssh USER@RECHNER ls -l
 
Der Befehl wird ausgeführt, das Ergebnis angezeigt und die Verbindung sofort geschlossen.
 
Der Befehl wird ausgeführt, das Ergebnis angezeigt und die Verbindung sofort geschlossen.
== ssh-keygen und ssh-copy-id ==
+
== Authentifizierung ==
 +
=== ssh-keygen und ssh-copy-id ===
 
Statt der Passworteingabe bei der Verbindungsaufnahme mit ssh kann man die sichere Authentifizierung mit Hilfe eines Schlüsselpaares (öffentlicher und privater Schlüssel) verwenden. Zur Erzeugung und Verwaltung dieser Schlüssel dient das Kommando ''ssh-keygen''.
 
Statt der Passworteingabe bei der Verbindungsaufnahme mit ssh kann man die sichere Authentifizierung mit Hilfe eines Schlüsselpaares (öffentlicher und privater Schlüssel) verwenden. Zur Erzeugung und Verwaltung dieser Schlüssel dient das Kommando ''ssh-keygen''.
 
Zuerst wird dieses Schlüsselpaar mit ''ssh-keygen'' erzeugt:
 
Zuerst wird dieses Schlüsselpaar mit ''ssh-keygen'' erzeugt:
Line 107: Line 108:
 
  Enter passphrase for key '/home/gosia/.ssh/id_rsa':
 
  Enter passphrase for key '/home/gosia/.ssh/id_rsa':
 
Die dabei angeforderte Passphrase ist dabei nicht mehr das Passwort des entfernten Users, sondern die Passphrase, die man bei der Erzeugung des Schlüsselpaares mit ssh-keygen angegeben hat.
 
Die dabei angeforderte Passphrase ist dabei nicht mehr das Passwort des entfernten Users, sondern die Passphrase, die man bei der Erzeugung des Schlüsselpaares mit ssh-keygen angegeben hat.
 +
=== ssh-agent und ssh-add ===
 +
Möchte man verständlicherweise auch die Eingabe der Passphrase vermeiden, so kann dazu ''ssh-add'' benutzt werden. 
 +
ssh-add ~/.ssh/id_rsa
 +
Enter passphrase for /home/gosia/.ssh/id_rsa:
 +
Identity added: /home/gosia/.ssh/id_rsa (/home/gosia/.ssh/id_rsa)
 +
Damit dies funktioniert, muss auch ''ssh-agent'' im Hintergrund laufen. Dies ist normalerweise der Fall, im Zweifelsfall kann man sich aber durch diese Eingabe davon überzeugen:
 +
ps -fC ssh-agent
 +
im Erfolgsfall erscheint diese Ausgabe, die natürlich je nach Umgebung variiert:
 +
UID        PID  PPID  C STIME TTY          TIME CMD
 +
gosia      5575  5512  0 20:41 ?          00:00:00 /usr/bin/ssh-agent env TMPDIR=/tmp/user/1000 /usr/bin/openbox-session
 +
Hat man ''ssh-add ~/.ssh/id_rsa'' ausgeführt, so kann man zumindest für die laufende Sitzung sich mit ssh auf dem entfernten Rechner anmelden, ohne die Passphrase eingeben zu müssen.
 +
 +
Dies lässt sich auch durch ein kleines Skript im Autostart automatisieren:
 +
# eval ssh-agent
 +
ssh-add ~/.ssh/id_rsa
 +
Die erste Zeile muss nur auskommentiert werden, wenn ssh-agent wider Erwarten nicht selbst startet.
  
 
== scp ==
 
== scp ==

Revision as of 21:13, 29 June 2020

ssh ist die Abkürzung für die Anwendung "Secure Shell". Im Prinzip besteht sie aus mindestens zwei Teilen, dem SSH-Server und dem SSH-Client. Da ssh modular aufgebaut ist, gibt es noch weitere Anwendungen für verschiedene Zwecke, z.B. einen sftp-server für den SFTP-Zugriff von entfernten Rechnern aus.

Mit ssh (SSH-Client) kann man sich an einem entfernten Rechner anmelden und dort Befehle ausführen. Vorrausetzung ist, daß auf dem entfernten Rechner ein SSH-Server läuft. Mit ssh wird sichere verschlüsselte Kommunikation zwischen den beiden Hosts ermöglicht. X11-Verbindungen, beliebige TCP-Ports und UNIX-Domain-Sockets können ebenfalls über den sicheren Kanal weitergeleitet werden.

Installation

Das ursprüngliche ssh-Protokoll wurde wurde 1995 von dem Finnen Tatu Ylönen als Open-Source-Projekt entwickelt. Da T. Ylönen aber bald begann, dies in einer eigenen Firma kommerziell zu vermarkten, wurde aus den letzten freien Sourcen ein neues Projekt entwickelt (geforkt), das sich OpenSSH nennt.[1]

Da wie gesagt, mindestens ein SSH-Server und ein SSH-Client benötigt wird, sollten als Minimum diese zwei Pakete installiert werden:

apt-get install openssh-server
apt-get install openssh-client

openssh-server wird auf dem entfernten Rechner (Server) installiert, openssh-client auf dem eigenen Rechner. Es gibt auch das Meta-Paket ssh, mit dem sowohl der openssh-server als auch der openssh-client in einem Rutsch installiert werden können:

apt-get install ssh

Allerdings ist der openssh-client schon per Default installiert, so daß es bei Bedarf reichen würde, nur openssh-server zu installieren.

Da wie unter Linux üblich, diese Rollen nicht festgelegt sein müssen, können beide Dienste auch auf beiden Rechnern laufen, so daß ein wechselseitigier Zugiff von Rechner A auf Rechner B und umgekehrt möglich wäre.

ACHTUNG: zumindest in den Repos von MX-18 existiert noch das Paket openssh-client-ssh1, das das veraltetete und unsichere Protokoll SSH1 benutzt. Von dessen Installation wird abgeraten.

Nach der Installation stehen folgende Kommandos zur Verfügung:

Kommando Bedeutung
ssh das eigentliche Kommando, um sich mit dem entfernten Rechne zu verbinden
sshd wie ssh, läuft jedoch als Dämon im Hintergund
scp zum Kopieren von Dateien zwischen den zwei Rechnern
ssh-keygen dient zur Verwaltung der benötigten Schlüssel
ssh-copy-id zum sicheren Austausch der für die Authentifizierung benötigten Schlüssel

ssh

Verwendung

Die Anmeldung (einloggen) auf dem entfernten Rechner erfolgt so:

ssh USER@RECHNER
USER = Username, als der man sich auf dem entfernten Rechner einloggen will. Dieser User muss dort natürlich auch existieren
RECHNER = Name des entfernten Rechners, es kann auch die IP-Adresse sein.

Ist der Username auf beiden Rechnern gleich, kann man ihn auch weglassen.

ssh RECHNER

Bei der ersten Anmeldung bekommt man eine Warnung, daß der Schlüssel des entfernten Rechners nicht bekannt ist und die Anfrage, ob man sich tatsächlich damit verbinden möchte.

The authenticity of host 'server (192.168.1.21)' can't be established.
ECDSA key fingerprint is b4:0b:eb:b6:15:16:d6:14:96:29:08:48:3e:dc:2b:c1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server' (ECDSA) to the list of known hosts.

Normalerweise sollte man sich vergewissern, ob dies tatsächlich der Schlüssel des entfernten Rechners ist (z.B. durch vorherige Anfrage beim Admin).

Wie auch immer, wird diese Anfrage mit yes beantwortet, so erfolgt eine neuerliche Warnung, daß dieser Schlüssel in die Datei ~/.ssh/known_hosts eingetragen wird, in der sich die Keys der bekannten Rechner (Hosts) befinden.

Warning: Permanently added 'server' (ECDSA) to the list of known hosts.

Damit wird beim neuerlichen Anmelden eine neue Warnung verhindert, da dieser entfernte Rechner nun als bekannt und vertrauenswürdig eingestuft ist.

Ist der Anmeldevorgang erfolgreich bekommt man im Terminal den Prompt des entfernten Rechners und alle Kommandos, die man eingibt, werden auch auf diesem entfernten Rechner ausgeführt, das Ergebnis jedoch im Terminal auf dem eigenen Rechner angezeigt. Die Eingabe z.B. von

ls

zeigt den Inhalt des entfernten Verzeichnisses an. Auf diese Weise kann man jemandem Hilfe leisten, indem man sich z.B. ansieht, wie dessen Konfigurationsdateien aussehen, sie eventuell korrigiert usw.

Die SSH-Verbindung wird entweder durch die Eingabe von

exit

beendet (auf der Client-Seite), oder durch Strg-D auf der Server-Seite. Sollte dies einmal nicht funktionieren (die Verbindung "hängt"), kann man es auf der Client-Seite auch durch die Eingabe einer sogenannten Escape-Sequenz versuchen:

~.

gefolgt von einem Return.

Nach dem Anmeldekommando kann auch ein Befehl oder ein Skript angefügt werden:

ssh USER@RECHNER ls -l

Der Befehl wird ausgeführt, das Ergebnis angezeigt und die Verbindung sofort geschlossen.

Authentifizierung

ssh-keygen und ssh-copy-id

Statt der Passworteingabe bei der Verbindungsaufnahme mit ssh kann man die sichere Authentifizierung mit Hilfe eines Schlüsselpaares (öffentlicher und privater Schlüssel) verwenden. Zur Erzeugung und Verwaltung dieser Schlüssel dient das Kommando ssh-keygen. Zuerst wird dieses Schlüsselpaar mit ssh-keygen erzeugt:

ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kb/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/gosia/.ssh/id_rsa.
Your public key has been saved in /home/kb/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yPKgsr6rmkq9lmsOy8v6wUatGPttnJEuKtWRiVTd7hj gosia@mypc.fritz.lokal
The key's randomart image is:
 +---[RSA 4096]----+
 |                 |
 |      +-         |
 |     .           |
 |   .+. .         |
 |.+.oo.. S        |
 |+*o.+-           |
 |=A*+.o.          |
 |o%A-c+           |
 |A..Xco           |
 +----[SHA256]-----+

-b Schlüssellänge in bit (Default = 2048 bits)

Die Datei-Vorgaben (~/.ssh/id_rsa und ~/.ssh/id_rsa.pub) zur Abspeicherung des privaten und öffentlichen Schlüssels sollten übernommen werden. Es ist möglich andere Dateinamen anzugeben, dies kompliziert jedoch alles unnötig.

Man sollte auch eine Passphrase angeben, um Angreifern die Arbeit zu erschweren. Wenn jemand in den Besitz des privaten Schlüssels gelangt, so ist noch zusätzlich diese Passphrase notwendig, um Zugriff auf den Server zu erhalten. Dies ist wie immer eine Abwägung zwischen Bequemlichkeit und Sicherheit.

Anschliessend überträgt man den öffentlichen Schlüssel mit ssh-copy-id auf den Server (entfernten Host)

ssh-copy-id -i .ssh/id_rsa.pub gosia@pcname

Unbedingt darauf achten, daß man den Dateinamen des öffentlichen Schlüssels angibt = .ssh/id_rsa.pub

Dabei wird man noch einmal nach seinem Passwort gefragt.

gosia@pcname's password: 
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'gosia@pcname'"
and check to make sure that only the key(s) you wanted were added.

Den Ratschlag, sich gleich mit ssh gosia@pcname einzuloggen, um sich zu überzeugen ob der Public-Key richtig übertragen wurde, sollte man unbedingt befolgen:

ssh gosia@pcname
Enter passphrase for key '/home/gosia/.ssh/id_rsa':

Die dabei angeforderte Passphrase ist dabei nicht mehr das Passwort des entfernten Users, sondern die Passphrase, die man bei der Erzeugung des Schlüsselpaares mit ssh-keygen angegeben hat.

ssh-agent und ssh-add

Möchte man verständlicherweise auch die Eingabe der Passphrase vermeiden, so kann dazu ssh-add benutzt werden.

ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/gosia/.ssh/id_rsa: 
Identity added: /home/gosia/.ssh/id_rsa (/home/gosia/.ssh/id_rsa)

Damit dies funktioniert, muss auch ssh-agent im Hintergrund laufen. Dies ist normalerweise der Fall, im Zweifelsfall kann man sich aber durch diese Eingabe davon überzeugen:

ps -fC ssh-agent

im Erfolgsfall erscheint diese Ausgabe, die natürlich je nach Umgebung variiert:

UID        PID  PPID  C STIME TTY          TIME CMD
gosia      5575  5512  0 20:41 ?           00:00:00 /usr/bin/ssh-agent env TMPDIR=/tmp/user/1000 /usr/bin/openbox-session

Hat man ssh-add ~/.ssh/id_rsa ausgeführt, so kann man zumindest für die laufende Sitzung sich mit ssh auf dem entfernten Rechner anmelden, ohne die Passphrase eingeben zu müssen.

Dies lässt sich auch durch ein kleines Skript im Autostart automatisieren:

# eval ssh-agent
ssh-add ~/.ssh/id_rsa

Die erste Zeile muss nur auskommentiert werden, wenn ssh-agent wider Erwarten nicht selbst startet.

scp

scp (Secure Copy) dient zum verschlüsselten Übertragen von Dateien zwischen zwei Computern. Dabei ist auch das Kopieren zwischen zwei entfenten Revhnern möglich. Die Syntax entspricht weitgehend der von cp.

Kopieren der Datei beispiel.txt vom Host auf den entfernten Rechner:

scp beispiel.txt USER@RECHNER:Verzeichnis/beispiel.txt

Kopieren der Datei beispiel.txt vom entfernten Rechner auf den Host:

scp USER@RECHNER:Verzeichnis/beispiel.txt beispiel.txt

für USER und RECHNER gelten die gleichen Werte wie unter ssh angeführt.

Optionen

Option Bedeutung
-1 benutze das ältere SSH-Protokoll 1 (SSH-1)
-2 benutze das SSH-Protokoll 2 (SSH-2)
-3 Kopien zwischen zwei entfernten Hosts werden über den lokalen Host übertragen. Ohne diese Option werden die Daten direkt zwischen den beiden entfernten Hosts kopiert. Mit dieser Option ist keine Fortschrittsanzeige möglich
-4 nur IPv4-Adressen
-6 nur IPv6-Adressen
-B Stapelverarbeitung zur Benutzung mit Skripten
-C die übertragenen Dateien werden komprimiert
-c Kryptographie wähle das Kryptographie-Verfahren (cipher) z.B. blowfish (Default: Triple-DES = 3DES). Weitere mögliche Verfahren: AES, IDEA oder SEED
-F ssh_config benutzt die User-eigene Konfigurationsdatei ssh_config
-i identity_file liest aus der Datei identity_file den benötigten privaten Schlüssel (private key)
-l Limit begrenzt die benutzte Bandbreite auf Limit kbit/s
-P Port Port für die Verbindung mit dem entfernten Rechner (ACHTUNG: -P = grosses P)
-p behält beim Kopieren den Zeitstempel und die Zugriffsrechte der Ursprungsdatei
-q "stiller Modus", keine Fortschrittsanzeige, keine Fehler- und Diagnosemeldungen
-r Ganze Verzeichnisse rekursiv kopieren. scp folgt dabei auch symbolischen Links
-T Deaktiviert die strenge Prüfung von Dateinamen. Standardmäßig prüft scp beim Kopieren von Dateien von einem entfernten Host in ein lokales Verzeichnis, ob die empfangenen Dateinamen mit den auf der Befehlszeile angeforderten übereinstimmen, um zu verhindern, dass der entfernte Host unerwartete oder unerwünschte Dateien sendet.

Aufgrund der Unterschiede in der Art und Weise, wie verschiedene Betriebssysteme und Shells Platzhalterzeichen für Dateinamen interpretieren, können diese Prüfungen dazu führen, dass gewünschte Dateien abgelehnt werden. Diese Option deaktiviert diese Prüfungen. Dies setzt voraus, daß man darauf vertraut, daß der Server keine unerwarteten Dateinamen sendet.

-v ausführlicher (verboser) Modus. Gibt zusätzliche Meldungen zum Debuggen aus.

Quellen