Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
lpi1:ssh [2016/04/28 15:02] stefan_miethke [Serverseitig Passwortauthentifizierung abschalten] |
lpi1:ssh [2024/03/01 14:17] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | **Todo**: anpassen des Unit-Files bei systemd ((als Default werden alle Prozesse einer proc group bei restart oder stop gekillt. Das ist nicht das, was man bei ssh o.ä. will. | ||
- | |||
- | Unit-File nach /etc/systemd/system kopieren und KillMode=process rein | ||
- | und das Verhalten ist wie früher. | ||
- | |||
- | Bei vielen Distris ist das Standard-Unit-File mit | ||
- | KillMode=control-group. D.h. man müsste immer und überall bei jeder | ||
- | ssh-Installation diese Änderung machen, wenn man nicht irgendwann ein | ||
- | doofes Problem haben will)) | ||
- | ====== 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>: (( Wenn auf dem entfernten Rechner Befehle ausgeführt werden sollen (z.B. Updates einspielen), die nicht unterbrochen werden sollen (z.B. von einem Netzwerkproblem), dann ist [[screen]] auf dem entfernten Rechner sehr nützlich )) | ||
- | ssh <Benutzer>@<Rechner> | ||
- | |||
- | hängende ssh-Verbindung beenden: | ||
- | ~. | ||
- | |||
- | ssh-Verbindung pausieren: | ||
- | ~Strg+z | ||
- | |||
- | Dateien auf andere Rechner kopieren: (( manchmal ist hier auch [[tar#dateien_kopieren_mit_sudo_tar_und_ssh]] nützlich, besonders wenn sowohl die Quell-Datei als auch das Ziel auf entfernten Rechnern liegen )) | ||
- | 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 ====== | ||
- | === Debian === | ||
- | rm /etc/ssh/ssh_host_*key* | ||
- | dpkg-reconfigure openssh-server | ||
- | |||
- | ====== Public-Private-Key Authentifizierung ====== | ||
- | Als Nutzer Schlüsselpaar erzeugen: | ||
- | ssh-keygen -t rsa -b 4096 -C "Kommentar" | ||
- | Public-Key auf anderen Rechner übertragen: | ||
- | ssh-copy-id -i .ssh/id_rsa.pub nutzer05@notebook06 | ||
- | oder alternativ: | ||
- | cat .ssh/id_rsa.pub | ssh nutzer05@notebook06 "cat >> .ssh/authorized_keys" | ||
- | ssh nutzer05@notebook06 "chmod 400 .ssh/authorized_keys" | ||
- | |||
- | ===== Serverseitig Passwortauthentifizierung abschalten ===== | ||
- | ''/etc/ssh/sshd_config'': | ||
- | <file> | ||
- | UsePAM no | ||
- | PasswordAuthentication no | ||
- | </file> | ||
- | |||
- | Alternativ (CentOS 7) | ||
- | <file> | ||
- | UsePAM yes | ||
- | ChallengeResponseAuthentication no | ||
- | PasswordAuthentication no | ||
- | </file> | ||
- | |||
- | ===== Nutzer Zugriff beschränken ===== | ||
- | ==== mit authorized_keys command ==== | ||
- | //Problem: die Datei ''~/.ssh/authorized_keys'' gehört dem Nutzer, den man einschränken möchte. // | ||
- | |||
- | <file txt ~/.ssh/authorized_keys> | ||
- | command="/bin/cat /var/log/messages",no-agent-forwanding,no-X11-forwarding,no-port-forwarding ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHBqUtiLsRTLKquoVXKwhrPRD92CzaN9EOkVEfWoHfdC nutzer26@notebook26 | ||
- | </file> | ||
- | ==== mit Match ==== | ||
- | <file txt /etc/ssh/sshd_config> | ||
- | Match User nutzer12 | ||
- | ForceCommand /usr/local/bin/cat_messages | ||
- | </file> | ||
- | |||
- | <file bash /usr/local/bin/cat_messages> | ||
- | #!/bin/sh | ||
- | /bin/cat /var/log/messages | ||
- | </file> | ||
- | ===== ssh-agent ===== | ||
- | Schlüssel dem ''ssh-agent'' hinzufügen: | ||
- | ssh-add .ssh/id_dsa | ||
- | |||
- | ((Bei openSuSE 11.0 wird der ''ssh-agent'' bei der Anmeldung nur gestartet, wenn das Verzeichnis ''~/.ssh'' existiert: | ||
- | mkdir -m 700 ~/.ssh | ||
- | )) | ||
- | ==== Agent-Forwarding nutzen ==== | ||
- | ssh -A nutzer17@notebook17 | ||
- | ssh nutzer07@notebook07 | ||
- | |||
- | ==== SSH über mehrere Hops ==== | ||
- | <file> | ||
- | +--------+ +------------+ +------------+ | ||
- | | ssh | | Hop Server | | server | | ||
- | | client | | notebook01 | | notebook02 | | ||
- | | | ================ssh========tunnel============> | | | ||
- | +--------+ +------------+ +------------+ | ||
- | </file> | ||
- | |||
- | === Client === | ||
- | centos 7: | ||
- | |||
- | <file text ~/.ssh/config > | ||
- | Host notebook02 | ||
- | Hostname notebook02.linuxhotel.de | ||
- | ProxyCommand ssh notebook01.linuxhotel.de -W %h:%p | ||
- | </file> | ||
- | |||
- | Bei älteren SSH-Versionen muss zusätzlich ''netcat'' bzw. ''nc'' installiert sein: | ||
- | ''~/.ssh/config'' : ( debian 6.0, centos 6 ) | ||
- | |||
- | <file> | ||
- | Host notebook02 | ||
- | Hostname notebook02.linuxhotel.de | ||
- | ProxyCommand ssh -q notebook01.linuxhotel.de nc %h %p | ||
- | </file> | ||
- | |||
- | === Hop Server === | ||
- | //optional//, damit sich der Benutzer nicht auf dem Hop-Server einloggen kann | ||
- | |||
- | ''/etc/ssh/sshd_config'' : | ||
- | <file> | ||
- | Match User nutzer02 | ||
- | ForceCommand nc notebook02 22 | ||
- | </file> | ||
- | |||
- | === testen === | ||
- | ssh notebook02 | ||
- | |||
- | |||
- | ==== 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 ===== | ||
- | Allgemein: | ||
- | ssh -L <lokaler Port>:<Zielrechner>:<Zielport> <Benutzer>@<ssh-Server> | ||
- | |||
- | Spezialfall X-Weiterleitung: | ||
- | ssh -X <Benutzer>@<Rechner> | ||
- | |||
- | Dazu muß in der Datei ''/etc/ssh/sshd_config'' folgender Eintrag vorhanden sein: | ||
- | <file>X11Forwarding yes</file> | ||
- | |||
- | Tunnel Rückwärts: | ||
- | ssh -R <Port auf ssh-Server>:<Zielrechner>:<Zielport> <Benutzer>@<ssh-Server> | ||
- | |||
- | Dazu muß in der Datei ''/etc/ssh/sshd_config'' folgender Eintrag vorhanden sein: | ||
- | <file>GatewayPorts yes</file> | ||
- | |||
- | Tunnel nachträglich anlegen: | ||
- | ~C | ||
- | help | ||
- | -L <lokaler Port>:<Zielrechner>:<Zielport> | ||
- | |||
- | ===== IP Tunnel / VPN ===== | ||
- | //noch nicht getestet// | ||
- | |||
- | ==== Client ==== | ||
- | ssh -f -w 0:1 192.168.1.15 true | ||
- | ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252 | ||
- | route add 10.0.99.0/24 10.1.1.2 | ||
- | |||
- | ==== Server ==== | ||
- | ''/etc/ssh/sshd_config'' : | ||
- | <file> | ||
- | PermitTunnel yes | ||
- | </file> | ||
- | ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252 | ||
- | route add 10.0.50.0/24 10.1.1.1 | ||
- | |||
- | ====== Links ====== | ||
- | * [[ http://www.jfranken.de/homepages/johannes/vortraege/ssh1_inhalt.de.html | SSH Grundlagen von Johannes Franken ]] | ||
- | * [[ http://www.jfranken.de/homepages/johannes/vortraege/ssh2_inhalt.de.html | SSH Tunnels von Johannes Franken ]] | ||
- | * [[ http://www.jfranken.de/homepages/johannes/vortraege/ssh3_inhalt.de.html | Firewalls durchbohren von Johannes Franken ]] | ||
- | * [[ http://www.employees.org/~satch/ssh/faq/ssh-faq.html | SSH FAQ englisch ]] | ||
- | * [[ http://www.openssh.org/de/index.html | SSH Homepage deutsch ]] | ||