Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


lpi2:ssh

ssh

Einsatzzwecke von ssh

  • Fernadministration
  • Dateien übers Netz kopieren
  • Tunnel bauen

Vorteile von ssh

  • Sicherheit durch Public-Private Key Verschlüsselung
  • Mehrere Benutzer können einen Account gemeinsam Nutzen
  • Single Sign On möglich

Grundfunktionen

Einloggen auf <Rechner> mit <Benutzer>:

ssh <Benutzer>@<Rechner>

In dem Zusammenhang ist die Nutzung von screen sehr hilfreich.

Dateien auf andere Rechner kopieren:

scp <Datei> <Benutzer>@<Rechner>:/<Verzeichnis>

Dateien auf andere Rechner ohne lange Pfadangaben ins $HOME-Verzeichnis von <Benutzer> kopieren:

scp <Datei> <Benutzer>@<Rechner>:<Verzeichnis>

Fingerprint Hostkey überprüfen:

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub

Server Keys neu erzeugen

rm /etc/ssh/ssh_host_*key*

CentOS (ab 6), SuSE

service sshd restart

Debian

dpkg-reconfigure openssh-server

Clientseitig Server-Key löschen

ssh-keygen -R server-name
ssh-keygen -R IP-Adressse

Public-Private-Key Authentifizierung

Benutzerauthentifizierung

Als Nutzer Schlüsselpaar erzeugen:

ssh-keygen -C "Kommentar"

Public-Key auf anderen Rechner übertragen:

ssh-copy-id  -i .ssh/id_rsa.pub nutzer05@notebook05

oder alternativ:

cat .ssh/id_rsa.pub | ssh nutzer05@notebook05 "cat >> .ssh/authorized_keys"
ssh nutzer05@notebook05 "mkdir -m 700 .ssh"
ssh nutzer05@notebook05 "chmod 600 .ssh/authorized_keys"

Serverseitig Passwortauthentifizierung abschalten

/etc/ssh/sshd_config:

  UsePAM no
  PasswordAuthentication no

ssh-agent

Schlüssel dem ssh-agent hinzufügen:

ssh-add -i .ssh/id_dsa

Dem ssh-agent verfügbare Schlüssel anzeigen:

ssh-add -l

1)

Agent-Forwarding nutzen

ssh -A nutzer17@notebook17
ssh -A nutzer07@notebook07

SSH über mehrere Hops

2)

~/.ssh/config :

Host notebook01
  Hostname notebook01.linuxhotel.de
  ForwardAgent yes
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

Host notebook02
  Hostname notebook02.linuxhotel.de
  ProxyCommand ssh -W %h:%p notebook01
ssh notebook02

SSH skriptbar über mehrere Hops

Befehl per Skript auf notebook16 ausführen, notebook16 ist nur via notebook15 zu erreichen:

ssh-agent bash -c "ssh-add .ssh/id_dsa; ssh -A nutzer15@notebook15 ssh nutzer16@notebook16 ls"

Sicherheitseinschränkung bei Agent-Forwarding

Mit eingeschaltetem Agent-Forwarding sollte man nur vertrauenswürdige Server besuchen. root-Benutzer auf dem Server können während die Verbindung besteht den ssh-Agent „mitbenutzen“. Dazu sucht root nach

  • Prozess-Nummern ( -t ),
  • die dem verbundenen Benutzer gehören ( -u ),
  • die eine IP-Verbindung geöffnent haben ( -i ),
  • deren Namen mit der Zeichenkette sshd beginnt ( -c )
PIDS="$(lsof -a -i -c sshd -u nutzer05 -t)"

Weiter sucht er nach dazu passenden Socket-Dateien ( /tmp/ssh-*/agent.$pid ), und speichert die letzte ( tail -n 1 ) in der Variablen SSH_AUTH_SOCK

export SSH_AUTH_SOCK=$(for pid in $PIDS; do ls /tmp/ssh-*/agent.$pid; done 2>/dev/null | tail -n 1)

Auch ein ssh-agent auf dem client-Rechner kann ähnlich mitgenutzt werden:

export SSH_AGENT_PID=$(pgrep -u nutzer05 -x 'ssh-agent')
SSH_AUTH_SOCK=$(lsof -a -U -p $SSH_AGENT_PID -F n | tail -n 1)
export SSH_AUTH_SOCK=${SSH_AUTH_SOCK#n}
ssh nutzer07@notebook07

Fehlersuche

ssh -v nutzer06@notebook06
ssh -vv nutzer06@notebook06

SSH Tunnel

TCP Tunnel

Vorwärts

ssh -L <lokaler Port>:<Zielrechner>:<Zielport> <Benutzer>@<ssh-Server>

oder

ssh -f -L 8080:www.linuxhotel.de:80 nutzer03@notebook03
curl localhost:8080

X-Weiterleitung

ssh -X <Benutzer>@<Rechner>

oder

ssh -f -X notebook09 xterm

Dazu muß in der Datei /etc/ssh/sshd_config des Servers folgender Eintrag vorhanden sein:

X11Forwarding yes

Rückwärts

ssh -R <Port auf ssh-Server>:<Zielrechner>:<Zielport> <Benutzer>@<ssh-Server>

Dazu muß in der Datei /etc/ssh/sshd_config des Servers folgender Eintrag vorhanden sein:

GatewayPorts yes

Socks Proxy

für firefox, curl, …

ssh -f -D 1080 nutzer03@notebook09
curl --socks5 localhost:1080 www.linuxhotel.de

ppp over ssh

Dies ist nur ein Beispiel um zu zeigen, dass das geht. Eine modernere Variante ist die Funktion PermitTunnel von ssh zu nutzen.

Einfache Variante

pppd noauth nodetach pty "ssh root@notebook05 pppd idle 300 nodetach notty noauth" 192.168.2.1:192.168.2.2

Komplexe Variante

PPP over SSH - Tunnel bauen mit Standartwerkzeugen

Die Lösung ist noch nicht ausreichend getestet und wahrscheinlich unvollständig.Hier sind die Bausteine, die ich gerade nutze:

pppd
ssh
sudo

Damit baue ich eine solche Verbindung:

Notebook –> PPP-over-SSH –> Router –> Netzwerk ( 172.16.240.0/24 )

Zuerst die Einstellungen auf dem Router

SSH Client Konfiguration

/home/user/.ssh/authorized_keys:

command="/usr/bin/sudo /usr/sbin/pppd nodetach notty noauth 10.0.0.1:10.0.0.2" ssh-dss laj4flksa7dflkj ... ( der Schlüssel ) ...

Dieser Eintrag führt dazu, daß der sshd für den Benutzer „user“ den angegebenen Befehl ausführt, wenn der sich mit dem entsprechenden Schlüssel authentifiziert.

Mehr Informationen dazu unter man sshd, im Abschnitt „AUTHORIZED_KEYS FILE FORMAT“

sudo Konfiguration

/etc/sudoers, editieren mit dem Befehl visudo:

user router=NOPASSWD: /usr/sbin/pppd *

oder strenger:

user router=NOPASSWD: /usr/sbin/pppd nodetach notty noauth
10.0.0.1\:10.0.0.2

Dieser Eintrag führt dazu, daß die Benutzer „user“ und „andereruser“ auf dem Rechner „router“ den Befehl /usr/sbin/pppd mit den angegebenen Optionen mit root-Rechten ausführen dürfen.

Dann die Einstellungen auf dem Notebook

sudo Konfiguration

/etc/sudoers, editieren mit dem Befehl visudo:

User_Alias PPP = user, andereruser
PPP notebook=NOPASSWD: /usr/sbin/pppd *
PPP notebook=NOPASSWD: /sbin/route add -net 172.16.240.0/24 gw 10.0.0.2

oder strenger:

User_Alias PPP = user, andereruser
PPP notebook=NOPASSWD: /usr/sbin/pppd noauth nodetach persist demand
connect /bin/true pty "ssh user@router"
PPP notebook=NOPASSWD: /sbin/route add -net 172.16.240.0/24 gw 10.0.0.2

Dieser Eintrag führt dazu, daß die Benutzer „user“ und „andereruser“ auf dem Rechner „notebook“ die Befehle /sbin/route und /usr/sbin/pppd mit den angegebenen Optionen mit root-Rechten ausführen dürfen.

sshd als ftp-Server Ersatz

Links

1)
Bei SuSE 11.0 wird der ssh-agent bei der Anmeldung nur gestartet, wenn das Verzeichnis ~/.ssh existiert:
mkdir -m 700 ~/.ssh
lpi2/ssh.txt · Zuletzt geändert: 2018/12/26 05:24 (Externe Bearbeitung)