# Einführung in Linux
YALC - Yet Another Linux Course
Author: Daniel Schubert

# LINUX

### Das universelle Betriebssystem

Eine Einführung - Teil 11

Deutsche Angestellten Akademie

Frage: Fragen zur letzten Stunde?

### 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 isntallieren

#### screen

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