LINUX

Das universelle Betriebssystem

Eine Einführung - Teil 11

Deutsche Angestellten Akademie

ssh

SSH ermöglicht eine sichere, authentifizierte und verschlüsselte Verbindung zwischen zwei Rechnern über ein unsicheres Netzwerk.

Secure System Administration (Sichere Systemverwaltung) zur Absicherung der Fernverwaltung von Servern. Secure Application Tunneling (Sicheres Tunneln) zum transparenten Schutz TCP/IP-basierender Anwendungen als „End-to-End-Security“.

Secure Remote Command Execution (Sichere Ausführung von Kommandos) zur Ausführung einzelner Kommandos auf einem anderen Rechner. Dabei werden stdin, stdout und stderr transparent weitergeleitet. Sonderfall davon:

Secure Subsystem Execution (Sichere Ausführung von Subsystemen) zur Ausführung von auf dem Server vordefinierter Kommandos, wobei stderr jedoch nicht weitergeleitet wird. Beispiel: Secure File Transfer (Sicherer Dateitransfer) zur Herstellung sicherer, automatisierter und interaktiver Dateitransfers.

Funktionsweise

  • Server identifiziert sich mit Zertifikat
  • Client authentisiert sich mit Passwort od. Zertifikat
  • geheimer Schlüssel wird erzeugt für die Sitzung
  • Datenverkehr wird mit diesem Schlüssel verschlüsselt übertragen

Programme

  • ssh -> ...
  • scp -> Dateien über ssh kopieren
  • ssh-keygen -> Schlüssel erstellen
  • ssh-copy-id -> Schlüssel austauschen
  • sshd -> der ssh-Server

Verwendung

  • systemweite client Konfiguration: /etc/ssh/ssh_config
  • ~$ ssh [ -p port ] [user@]host
  • Wird kein User angegeben, nimmt ssh aktuellen User.
  • ~$ ssh -p 1234 root@omikron.net
  • ~$ ssh ::1

Verwendung mit ssh-Keys

  1. Schlüsselpaar generieren:
    ssh-keygen -b 4096
  2. öffentlichen Schlüssel zum Server kopieren:
    scp neuer-super-key.pub user@server.de:~
  3. Beim Server anmelden: ssh user@server.de
  4. $ mkdir ~/.ssh
    $ cat ~/neuer-super-key.pub  >> ~/.ssh/authorized_keys
    $ rm ~/neuer-super-key.pub 
    $ chmod 600 ~/.ssh/authorized_keys

    Oder mit ssh-copy-id

  5. nun ist Anmeldung mit Key möglich.

Begriffe

SSH Key ersetzt Passwort
authorized keys öffentliche Schlüssel die Zugriff erlauben ( Analogie: Schloß, das vom zugehörigen privaten Schl. geöffnet werden kann.)
identity key Privater Schlüssel, den SSH verwendet um den client zu authentisieren
host key öffentlicher SSH-Schlüssel des Servers
Session Key wird von den Kommunikations Partner ausgehandelt; verschlüsselt Daten während Übertragung

ssh_config

Host gitlab.com
	HostName gitlab.com
	PreferredAuthentications=publickey
	#PreferredAuthentications=password
	IdentityFile ~/.ssh/gitlab-com
	IdentitiesOnly yes
	User git 

Host *
	user root

ServerAliveInterval 120
ServerAliveCountMax 15
					

Nutzungsbeispiele

~$ ssh root@server 'cd /etc; \ 
tar czvf - network/' | cat > etc_network_backup.tar.gz 
~$ scp -r root@server:/etc/apache2 . 
~$ scp omikron-net.conf \ 
root@server:/etc/apache2/sites-available/ . 
~$ rsync -e ssh lk.schubertdaniel.de:/home/dany/backups/* \ 
/local/backup/dir/ >> backup.log 2>&1
						

rsync vs. scp

  • scp -> funktioniert wie cp; geeignet um schnell mal einzelne Dateien zu kopieren
  • rsync -> für „richtige“ Backups; vergleicht lokales u. remote Verz., kopiert nur Unterschiede
Aufgabe:
  • erstellt einen ssh-key ohne Passwort; verwendet diesen key für Folgendes.
  • Erstellt ein script, welches Serverseitig alle Ordner in /usr/share/nginx/html ausser denen die„mich-*” heissen, in ein tar.gz Archiv verpacken. ( zb per Array im script, oder mit einer text-datei als input
  • Erstellt ein script, welches diese Backups mit rsync herunterlädt.
  • Das Backup soll die Datei Attribute unverändert belassen
    ( Datum, Rechte etc ).
  • Erstellt einen Cron-Job, der das wöchentlich macht.

Hinweise:

  • cron muss vollständige Pfade angegeben bekommen.
  • rsync mit spezifischem key:
    /usr/bin/rsync -e 'ssh -i /home/$USERNAME/.ssh/key-ohne-pw' 

Lösungs Vorschlag

remote backup script

local rsync script

Beschränkung von ssh auf best. Komandos

# Datei ~/.ssh/authorized_keys
# führt bei Anmeldung ls aus; lässt keine anderen Kommandos zu
command="/bin/ls -la ~" ssh-rsa AAAAB3.......
# oder
command="/bin/echo You invoked: $SSH_ORIGINAL_COMMAND" ssh-rsa AAAAB..

Um rsync zu verwenden ist ein wrapper script nötig:

# Datei ~/.ssh/authorized_keys
command="/absoluter/pfad/rsync-check.sh" ssh-rsa AAAAB3.......
#!/bin/bash 
#
# rsync-check.sh

set -- $SSH_ORIGINAL_COMMAND
cmd="$1"; shift
case "$cmd" in
  scp|rsync) exec "$cmd" "$@" ;;
          *) echo "ERROR: request not permitted" ;;
esac

Windows Programme für ssh

  • winscp
  • putty
  • swish

Linux Helferlein

  • screen
  • byobu
  • tmux
  • terimator
  • tmate

screen

https://wiki.ubuntuusers.de/Screen/