SSH#

SSH (Secure Shell) ist ein Protokoll, mit Hife dessen man eine verschlüsselte Verbindung zu entfernten Rechnern aufbauen kann, um sich dort z.B. einzuloggen (ssh), Dateien zu kopieren (scp) oder auch beliebige Netzverbindungen (z.B. eine X11-Session) zu verschlüsseln. Es ist auch möglich, mit festen, auf dem Clientrechner hinterlegten Authentifizierungs-Schlüsseln zu arbeiten, so daß man sich nicht mit einem Passwort anmelden muss (gut z.B. für Skripte).

Die gängig benutzte SSH-Implementation ist OpenSSH (http://www.openssh.com/de). Eine sehr gute SSH-Implementation unter Windows ist PuTTY.

Eine gute deutschsprachige Wiki-Seite zum Thema gibt es auf LinuxWiki:OpenSSH.

Siehe auch SshMitXserver.

Mit ssh kann man auch ein VPN "für Arme" bauen. Ein kurzes Howto steht z.B: unter http://alinux.washcoll.edu/docs/sshtunnel/ssh.txt (siehe auch SecureShellTunnel)

Einloggen per SSH-Schlüssel#

Da ich dieses immer wieder benötige (und auch immer hier suche), hier eine Kurzanleitung, wie man sich per SSH-Key auf einem fremden Rechner einloggen kann. Dazu muss man zuerst einen eigenen RSA-Schlüssel erzeugen. Diesen muss man dann auf dem Rechner, auf dem man sich einloggen will, hinterlegen. Gibt man bei der Erzeugung des Schlüssels keine Passphrase ein, funktioniert das dann ganz ohne Passwort (kann also z.B. auch von Skripten - aber auch von jedem Hacker - benutzt werden).

  # Zuerst Schlüssel erzeugen
  ssh-keygen -b 2048 -t rsa
  # ... entweder umständlich, aber besser erklärend, was wirklich passiert
  ssh remoteuser@remotehost.example.net "umask 077; mkdir -p .ssh; cat >> .ssh/authorized_keys" <.ssh/id_rsa.pub
  # ... oder automatisch und elegant
  ssh-copy-id -i .ssh/id_rsa.pub remoteuser@remotehost.example.net

Übrigens kann man beim passwortlosen Einloggen per Schlüssel noch einige Restriktionen setzen und insbesondere einen fest auszuführenden Befehl angeben. Hierzu steht einiges auf der sshd-manpage sowie ein Beispiel auf der Seite zu meinem BackupServer. -- ThomasBayen

X11-Forwarding #

Wenn man openssh richtig konfiguriert, kann man auf dem fernen Rechner ganz normal X11-Programme starten. Dazu muss man auf dem Server in /etc/ssh/sshd_config die Einstellung "ForwardX11 yes" vornehmen. Je nach Distribution muss man seinem Client auch sagen, daß er Forwarding benutzen kann. Das kann man global in /etc/ssh/ssh_config, aber auch in den benutzerspezifischen Einstellungen in .ssh/... bzw. per Kommandozeilenoption "-o".

Will auf dem fernen Rechner einfach kein X11 funktionieren, weil keine DISPLAY-Variable gesetzt ist, könnte das daran liegen, daß man auf dem Server einen minimalen Satz an X11-Bibliotheken (z.B. das xauth-Programm) benötigt. Das kann man übrigens mit "ssh -v ..." feststellen. Unter Debian muss man dazu das Paket xbase-clients auf dem Server installieren (mit allen Abhängigkeiten ca. 6.5MB).

Benutzername setzen #

Wenn man sich regelmaessig auf einem anderen Rechner einloggt, auf dem man einen anderen Benutzernamen hat, kann es lästig sein, diesen immer angeben zu müssen. Man kann hier einen Default-Namen setzen. Dazu benutzt man die Möglichkeit, Einstellungen vom Servernamen abhängig zu machen. Das geht auch in der Datei ~/.ssh/config und sieht in etwa so aus:

  Host terminalserver
       User thomasbayen

  Host ssh.sourceforge.net
       User myaccount

  Host meinserver
       User root

  Host *.intranet
       User thomas

Socks Proxy #

Wer von unterwegs auf einem vertrauenswürdigen Weg Internetseiten abrufen will, braucht nur einen ssh-Zugang zu einem vertrauenswürdigen ssh-Host. Darüber kann mit

  ssh -D8090 -N meinhost.example.com 

ein Socks-Tunnel aufgebaut werden.

In der Proxy-Konfiguration des Internet-Browsers trägt man dazu localhost:8090 ein (Port aus der Beispielzeile oben).

VPN mit SSH #

Auch ein richtiges VPN kann man per SSH einrichten. Hierzu kann ein voll einsatzfähiges Netzwerkdevice getunnelt werden (nicht nur ein einzelner Port geforwarded). Das ssh-Kommando erzeugt allerdings nur zwei tun-DEvices und konfiguriert diese nicht. Mit etwas Liebe kann man das aber alles in einem kurzen Skript (oder sogar in einem langen Einzeiler) kombinieren. Außerdem gibt es ein Programm namens "autossh", das den Tunnel immer wieder neu startet (wenn er mal zusammenbricht). Als Anregung kann man dieses Skript nehmen:

#!/bin/bash

COMMAND=$1
GATEWAY=entry.dyndns.mydomain.org
GATEWAY_PORT=22
IP_LOCAL=192.168.2.2
IP_SERVER=192.168.2.1
NETMASK=255.255.255.0
TUN_LOCAL=0
TUN_SERVER=1

#########################################################################################
function startvpn() {
  autossh -f -M 0 -w $TUN_LOCAL:$TUN_SERVER -p $GATEWAY_PORT $GATEWAY \
  -o ExitOnForwardFailure=yes -o ServerAliveInterval=60 -o PermitLocalCommand=yes \
  -o LocalCommand="ifconfig tun$TUN_LOCAL $IP_LOCAL netmask $NETMASK; route add -net 192.168.223.0/24 gw $IP_SERVER dev tun$TUN_LOCAL" \
    "ifconfig tun$TUN_SERVER $IP_SERVER netmask $NETMASK; sleep 99999999"
}

function stopvpn() {
  killall autossh
}

function checkvpn() {
  ifconfig tun$TUN_LOCAL
  ping -c 1 -W 3 $IP_SERVER
}

#########################################################################################

if [ "start" == $COMMAND ]; then
  startvpn
elif [ "stop" == $COMMAND ]; then
  stopvpn
elif [ "check" == $COMMAND ]; then
  checkvpn
else
  echo "usage:"
  echo "startvpn.sh [start|stop|check]"
fi

Weitere spannende Sachen #

Mit SshAgentForwarding kann man seinen privaten Schlüssel nicht nur benutzen, um sich auf einem anderen Rechner einzuloggen, sondern auch, um sich von diesem anderen Rechner dann wiederum auf einen dritten einzuloggen. Das kann man am Ende so konfigurieren, das man mit einem ganz normalen ssh-Befehl transparent z.B. aus dem Internet durch seine heimische Firewall hindurch auf einen internen Arbeitsplatzrechner zugreifen kann.

Mit SshMultiplexing kann man eine einzelne Verbindung von mehreren SSH Befehlen benutzen lassen. Das beschleunigt diese ungemein. Die Arbeit z.B. mit einem Dateiexplorer und einer URL der Form ssh://... läuft dadurch wesentlich flüssiger ab, weil nicht für jeden Mausklick eine neue Verbindung aufgebaut und authentifiziert wird.

Links Agent #

Tags:  Ssh, VPN

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-23) was last changed on 14-Jan-2020 09:02 by ThomasBayen