# SSH

SSH ist ein Protokoll zur sicheren Komunikation mit Netzerkkomponenten.
Alle Ihr Vorgestellten Vorgehen gelten nur für Linux-Clients und
Unix-Server. Als Alternatvie kann man das Programm
"[putty](../cli/putty)" nutzen, dies ist auf den drei grossen OS
erhältlich.

## Client

### Verbindung

Um eine Verbindung zu einem SSH-Server herzustellen wird folgender
Befehl benötigt:

``` bash
ssh user@IP.des.Server
```

bzw. `ssh user@Domainname.des.Server`

### Public Key

Im Normalfall muss man sich nun immer mit dem Benutzerpasswort anmelden,
es gibt aber noch eine bequemmer und sichere Anmeldungsmethode, dass
Public Key Verfahren. Die Sicherheit kann aber nur der
SSH-Server-Betreiben erhöhen. Mit folgendem Befehl werden die
entsprechenden Key's generiert:

``` bash
ssh-keygen -t rsa -b 4096
```

Und mit folgendem Befehl wird der Public Key Übertragen:

``` bash
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
```

Nun wird noch einmal das Passwort des Benutzer abgefragt. Wenn dieser
Vorgang erfolgreich war, wird man bei der nächsten Verbindung nicht mehr
nach dem Passwort gefragt.

### SSH-Tunnel

Ein SSH-Tunnel dient dazu Infrastrukturen zu nutzen welche sich beim
SSH-Server befinden (MySQL, lokale Webseite usw.) Mit folgendem Befehl
wird der SSH-Tunnel aufgebaut:

``` bash
ssh -D 8080 -f -C -q -N user@Domainname.des.Server
```

Danach muss die Verbindung nur noch als lokaler SOCKET-Proxy eingetragen
werden. Für Firefox kann folgendes Add-On empfohlen werden: [Socks
Proxy](https://addons.mozilla.org/de/firefox/addon/socks-proxy/)

### Optionen

| Option | Erklärung                                       |
|--------|-------------------------------------------------|
| -b     | Fixierung an eine Schnittstelle                 |
| -C     | Komprimieren aller Verbindungsdaten             |
| -D     | Portfestlegung bei Port-Forwarding / SSH-Tunnel |
| -N     | Keine Remotebefehl ausführen (SSH-Tunnel)       |
| -p     | Abweichender Port angeben (Standard 22)         |
| -q     | Stille Verbindung                               |
| -X     | X11 Forwarding einschalten                      |

## SCP

`scp` ist ein Kopierprogramm, welches mit SSH gute zusammenabeitet. Die
witchigsten Optionen von SSH gelten auch bei `scp`

### Kopieren von Remote-Host

Zum Kopieren einer Datei vom Remote-Host wird folgender Befehl benötigt:

``` bash
scp gregor@172.16.10.5:/var/log/syslog /home/gregor/Log/syslog_172.16.10.5
```

### Kopieren zum Remote-Host

Zum Kopieren einer Datei zum Remote-Host wird folgender Befehl benötigt:

``` bash
scp webmin.deb gregor@172.16.10.5:/home/gregor
```