This page (revision-23) was last changed on 14-Jan-2020 09:02 by ThomasBayen 

This page was created on 03-Oct-2006 21:29 by UnknownAuthor

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
23 14-Jan-2020 09:02 6 KB ThomasBayen to previous Links zu Seiten SshForwarding und SshMultiplexing in einem Absatz erklärt.
22 12-Jan-2020 18:49 6 KB Peter to previous | to last
21 12-Jan-2020 13:26 6 KB ThomasBayen to previous | to last Link auf neue Seite SshAgentForwarding

Page References

Incoming links Outgoing links

Version management

Difference between version and

!!! 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
}}}

== WeitereSSH>> <<spannendeAgent>> <<SachenForwarding>> ==

<<MitSiehe>> 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 ==

* http://www.lug-jena.de/veranstaltungen/ssh.html - Artikel der LUG Jena: gute, umfassende Einführung auf deutsch
* [Richard Albrecht|http://www.rleofield.de/] hat auf der [ORR 2011|http://programm.openrheinruhr.de/2011/day_2011-11-13.de.html] neben Peter Hormanns einen leicht verständlichen [Vortrag|http://glt11-programm.linuxtage.at/events/36.de.html] zu [ssh|http://lug-ottobrunn.de/wiki/SSH_Spickzettel] und [X2go|http://lug-ottobrunn.de/wiki/Remote_Desktop_mit_X2GO] mit [Ubuntu|http://lug-ottobrunn.de/wiki/Hinweise_fuer_Umsteiger] gehalten.
* [SshOhneRoot] - Konfiguration für besseren Passwortschutz

[{Tag Ssh VPN}]