Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
fortgeschrittene:ssh [2016/12/02 09:05] ingo_wichmann [Public-Private-Key Authentifizierung] |
fortgeschrittene:ssh [2023/01/27 15:37] (aktuell) ingo_wichmann |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== ssh ====== | ====== ssh ====== | ||
- | ===== Einsatzzwecke von ssh ===== | ||
- | * Fernadministration | ||
- | * Dateien übers Netz kopieren | ||
- | * Tunnel bauen | ||
- | ===== Vorteile von ssh ===== | + | ===== Server Keys ===== |
- | * Sicherheit durch Public-Private Key Verschlüsselung | + | ==== Server Keys neu erzeugen ==== |
- | * Mehrere Benutzer können einen Account gemeinsam Nutzen | + | rm /etc/ssh/ssh_host_*key* |
- | * Single Sign On möglich | + | |
- | ====== Grundfunktionen ====== | + | === CentOS (ab 6), SuSE === |
- | 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 6 === | + | |
service sshd restart | service sshd restart | ||
=== Debian === | === Debian === | ||
dpkg-reconfigure openssh-server | dpkg-reconfigure openssh-server | ||
+ | |||
==== Clientseitig Server-Key löschen ==== | ==== Clientseitig Server-Key löschen ==== | ||
ssh-keygen -R server-name | ssh-keygen -R server-name | ||
+ | ssh-keygen -R IP-Adressse | ||
+ | |||
+ | ==== Im DNS ablegen ==== | ||
+ | DNS Resource Records erzeugen: | ||
+ | ssh-keygen -r servername | ||
+ | oder | ||
+ | ssh-keyscan -D servername | ||
+ | |||
+ | und in der [[bind|DNS Zonendatei des primären Nameservers]] hinterlegen. | ||
+ | |||
+ | === Clientseitige Einstellungen === | ||
+ | Damit der OpenSSH Client den SSHFP-Einträgen im DNS vertraut muss DNSSEC für die Zone aktiviert sein. | ||
+ | |||
+ | <file txt ~/.ssh/config> | ||
+ | VerifyHostKeyDNS yes | ||
+ | </file> | ||
+ | |||
+ | Ab glibc Version 2.31: | ||
+ | <file txt /etc/resolv.conf> | ||
+ | options trust-ad | ||
+ | </file> | ||
+ | |||
+ | Falls systemd-resolved genutzt wird: | ||
+ | <file txt /etc/systemd/resolved.conf.d/override.conf> | ||
+ | [Resolve] | ||
+ | DNSSEC=allow-downgrade | ||
+ | # oder | ||
+ | # DNSSEC=yes | ||
+ | </file> | ||
+ | |||
====== Public-Private-Key Authentifizierung ====== | ====== Public-Private-Key Authentifizierung ====== | ||
+ | ===== Benutzerauthentifizierung ===== | ||
Als Nutzer Schlüsselpaar erzeugen: | Als Nutzer Schlüsselpaar erzeugen: | ||
ssh-keygen -C "Kommentar" | ssh-keygen -C "Kommentar" | ||
Zeile 39: | Zeile 52: | ||
cat .ssh/id_rsa.pub | ssh nutzer05@notebook05 "cat >> .ssh/authorized_keys" | cat .ssh/id_rsa.pub | ssh nutzer05@notebook05 "cat >> .ssh/authorized_keys" | ||
ssh nutzer05@notebook05 "mkdir -m 700 .ssh" | ssh nutzer05@notebook05 "mkdir -m 700 .ssh" | ||
- | ssh nutzer05@notebook05 "chmod 400 .ssh/authorized_keys" | + | ssh nutzer05@notebook05 "chmod 600 .ssh/authorized_keys" |
===== Serverseitig Passwortauthentifizierung abschalten ===== | ===== Serverseitig Passwortauthentifizierung abschalten ===== | ||
Zeile 52: | Zeile 65: | ||
ssh-add -i .ssh/id_dsa | ssh-add -i .ssh/id_dsa | ||
- | Bei SuSE 11.0 wird der ''ssh-agent'' bei der Anmeldung nur gestartet, wenn das Verzeichnis ''~/.ssh'' existiert: | + | Dem ''ssh-agent'' verfügbare Schlüssel anzeigen: |
- | mkdir -m 700 ~/.ssh | + | ssh-add -l |
+ | (( Bei SuSE 11.0 wird der ''ssh-agent'' bei der Anmeldung nur gestartet, wenn das Verzeichnis ''~/.ssh'' existiert: | ||
+ | mkdir -m 700 ~/.ssh | ||
+ | )) | ||
==== Agent-Forwarding nutzen ==== | ==== Agent-Forwarding nutzen ==== | ||
ssh -A nutzer17@notebook17 | ssh -A nutzer17@notebook17 | ||
ssh -A nutzer07@notebook07 | ssh -A nutzer07@notebook07 | ||
- | ==== SSH über mehrere Hops ==== | ||
- | ((ausführlicher beschrieben unter http://sshmenu.sourceforge.net/articles/transparent-mulithop.html)) | ||
- | |||
- | ''~/.ssh/config'' : | ||
- | <file> | ||
- | Host notebook01 | ||
- | Hostname notebook01.linuxhotel.de | ||
- | ForwardAgent yes | ||
- | |||
- | Host notebook02 | ||
- | Hostname notebook02.linuxhotel.de | ||
- | ProxyCommand ssh -W %h:%p notebook01 | ||
- | </file> | ||
- | |||
- | 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 ==== | ==== Sicherheitseinschränkung bei Agent-Forwarding ==== | ||
Zeile 131: | Zeile 128: | ||
===== ppp over ssh ===== | ===== ppp over ssh ===== | ||
- | Dies ist nur ein Beispiel um zu zeigen das das geht. Eine modernere Variante ist die Funktion ''PermitTunnel'' von ssh zu nutzen. | + | Dies ist nur ein Beispiel um zu zeigen, dass das geht. Eine modernere Variante ist die Funktion ''PermitTunnel'' von ssh zu nutzen. |
==== Einfache Variante ==== | ==== Einfache Variante ==== |