====== SSH / SSL ====== * [[http://www.golem.de/news/dan-j-bernstein-krypto-algorithmen-sicher-designen-1501-111605-2.html|Krypto-Algorithmen sicher designen]] von Dan J. Bernstein -> Dan Bernstein fordert Algorithmen, bei denen man weniger falsch machen kann. * **[[SSH-Schlüssel austauschen für ein passwortlosen Login]]** * [[OpenSSL]] * [[::EDV:SSL-Schlüssel generieren]] * [[letsencrypt]] * [[einzelne Dateien mit openSSL verschlüsseln]] * [[Datenbankverbindungen zu einer MySQL mit SSL-Verschlüsselung]] * [[https://www.poftut.com/use-openssl-s_client-check-verify-ssltls-https-webserver/|How To Use OpenSSL s_client To Check and Verify SSL/TLS Of HTTPS Webserver?]] * [[SCP-only mit Change Root]] * [[SFTP-User mit Change Root]] * Datenaustausch zwischen **Android** ([[https://play.google.com/store/apps/details?id=nextapp.fx|FX File Explorer]] & [[https://play.google.com/store/apps/details?id=nextapp.fx.rk|FX Plus License]]) und **FreeBSD** per **''SFTP''**: siehe [[#sshd_config|SSHD Config]] * [[SSH/BASH mit Change Root]] * [[SSH-Tunnel]] * [[http://hp.kairaven.de/scpsftp/scp-sftp.html|SCP und SFTP unter Linux & Windows]] * __**[[SSH/SCP - Sicherheit und Geschwindigkeit]]**__ * SSH Key erstellen * ''%%ssh-keygen -t rsa -b 4096%%'' * ''%%ssh-keygen -t ed25519%%'' * SSH Key erstellen mit höherer KDF Rundenzahl (nur längere Passphrasen Verifikation) * ''%%ssh-keygen -t rsa -b 4096 -a 256%%'' * ''%%ssh-keygen -t ed25519 -a 256%%'' * ''%%echo 'eval $(ssh-agent)' >> ~/.bashrc%%'' * ''%%echo "ssh-add" >> ~/.bashrc%%'' * ''%%ssh fritz@mein.sshserver.de:/home/fritz%%'' * //''%%ssh -o "StrictHostKeyChecking=no" fritz@mein.sshserver.de%%''// * ''%%sftp fritz@mein.sshserver.de:/home/fritz%%'' * [[SSHFS]] * ''%%sshfs fritz@mein.sshserver.de:/home/fritz /mnt%%'' * [[Fehler: Gesicherte Verbindung fehlgeschlagen]] ===== TLS-Ciphers anzeigen ===== # openssl ciphers -v | fgrep TLSv1.2 | sed 's/.*/ &/' ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384 ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384 DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256 ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256 ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256 DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256 RSA-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=RSAPSK Au=RSA Enc=AESGCM(256) Mac=AEAD DHE-PSK-AES256-GCM-SHA384 TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESGCM(256) Mac=AEAD RSA-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=RSAPSK Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD DHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=DHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=ECDHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD PSK-AES256-GCM-SHA384 TLSv1.2 Kx=PSK Au=PSK Enc=AESGCM(256) Mac=AEAD PSK-CHACHA20-POLY1305 TLSv1.2 Kx=PSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD RSA-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=RSAPSK Au=RSA Enc=AESGCM(128) Mac=AEAD DHE-PSK-AES128-GCM-SHA256 TLSv1.2 Kx=DHEPSK Au=PSK Enc=AESGCM(128) Mac=AEAD AES128-GCM-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(128) Mac=AEAD PSK-AES128-GCM-SHA256 TLSv1.2 Kx=PSK Au=PSK Enc=AESGCM(128) Mac=AEAD AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256 AES128-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA256 # openssl ciphers -v | fgrep TLSv1.3 | sed 's/.*/ &/' TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD ===== Von SSH und SCP unterstützte Ciphers anzeigen ===== # man ssh_config # lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic # ssh -V OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017 # ssh -Q cipher 3des-cbc aes128-cbc aes192-cbc aes256-cbc rijndael-cbc@lysator.liu.se aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com chacha20-poly1305@openssh.com Beispiel: # ssh -c rijndael-cbc@lysator.liu.se,aes256-cbc,aes256-ctr user@host ===== SSH Config ===== Beispiel Konfiguration, die nur Ed25519 erlaubt (nur als Beispiel, wenn überhaupt sollte der Server Cipher usw. einschränken) #https://man.openbsd.org/ssh #https://man.openbsd.org/ssh_config #ssh -Q help Host * #ssh -Q sig CASignatureAlgorithms ssh-ed25519,sk-ssh-ed25519@openssh.com #ssh -Q kex KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org #ssh -Q mac MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-256 #ssh -Q cipher #ssh -Q cipher-auth Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-cbc,aes256-ctr #ssh -Q key HostKeyAlgorithms rsa,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,ssh-ed25519,sk-ssh-ed25519@openssh.com Alle 3s ein Nullpaket (keep-alive) an den Server senden (hier bis zu 10 Mal) Host * ClientAliveInterval 10 ClientAliveCountMax 3 TCPKeepAlive yes Andere Config-Dateien einlesen Include config.d/*.conf Für den Host example.com einen anderen Standard-Port verwenden (hier: 2222) Host example.com Port 2222 ===== SSHD Config ===== siehe [[https://man.openbsd.org/sshd_config]] ==== komplette Beispiel-Config ==== === Unix-like === Port 22 AddressFamily any ListenAddress 0.0.0.0 ListenAddress :: PermitRootLogin prohibit-password PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys HostbasedAuthentication no PasswordAuthentication no PermitEmptyPasswords no KbdInteractiveAuthentication no ChallengeResponseAuthentication no KerberosAuthentication no GSSAPIAuthentication no UsePAM yes X11Forwarding yes PrintMotd no PrintLastLog yes TCPKeepAlive yes ClientAliveInterval 10 ClientAliveCountMax 3 VersionAddendum none Banner none # Debian only DebianBanner no Subsystem sftp internal-sftp -u 0022 Match User mm AllowTcpForwarding no ChrootDirectory /public/mm ForceCommand internal-sftp PasswordAuthentication yes PermitTTY no X11Forwarding no === Windows === Port 22 Port 23 AddressFamily any ListenAddress 0.0.0.0 ListenAddress :: PermitRootLogin prohibit-password PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys HostbasedAuthentication no PasswordAuthentication no PermitEmptyPasswords no KbdInteractiveAuthentication no ChallengeResponseAuthentication no GSSAPIAuthentication no PrintMotd yes PrintLastLog yes TCPKeepAlive yes ClientAliveInterval 10 ClientAliveCountMax 3 VersionAddendum none Banner none Subsystem sftp internal-sftp #Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys # configure pwsh as default shell (run command in pwsh as admin): # New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "$(Get-Command pwsh | Convert-Path)" -PropertyType String -Force ==== Zugriff ==== Port 22 und 23 (z.B. extern nur 23 erlauben und intern 22 nutzen) Port 22 Port 23 AddressFamily any ListenAddress 0.0.0.0 ListenAddress :: Port 22 (IPv4+IPv6) und 23 (IPv6) (gleiches Beispiel wie oben, falls man im Router eine IPv4 Portweiterleitung über NAT umleiten will) #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: ListenAddress 0.0.0.0:22 ListenAddress [::]:22 ListenAddress [::]:23 === Allgemein === PermitRootLogin prohibit-password PubkeyAuthentication yes PasswordAuthentication no PermitEmptyPasswords no ChallengeResponseAuthentication no UsePAM no X11Forwarding yes PrintMotd yes PrintLastLog yes ==== SFTP ==== Um die Standard umask zu verwenden einfach '-u 0022' weglassen # internal sftp (recommended) Subsystem sftp internal-sftp -u 0022 # external sftp ## Debian/Ubuntu Subsystem sftp /usr/lib/openssh/sftp-server -u 0022 ## FreeBSD Subsystem sftp /usr/libexec/sftp-server -u 0022 ===== Deprecated option ===== # The ServerKeyBits option only applies to SSH protocol version 1. # Aug 13 13:49:12 sshserver01 sshd[3969]: rexec line 30: Deprecated option UsePrivilegeSeparation # Aug 13 13:49:12 sshserver01 sshd[3969]: rexec line 33: Deprecated option KeyRegenerationInterval # Aug 13 13:49:12 sshserver01 sshd[3969]: rexec line 36: Deprecated option ServerKeyBits # Aug 13 13:49:12 sshserver01 sshd[3969]: rexec line 64: Deprecated option RSAAuthentication # Aug 13 13:49:12 sshserver01 sshd[3969]: rexec line 77: Deprecated option RhostsRSAAuthentication # Aug 13 13:49:12 sshserver01 sshd[3969]: reprocess config line 64: Deprecated option RSAAuthentication # Aug 13 13:49:12 sshserver01 sshd[3969]: reprocess config line 77: Deprecated option RhostsRSAAuthentication ===== Schwäche von Diffie-Hellman für TLS ===== * [[http://www.pro-linux.de/news/1/22348/neue-angriffe-auf-dh-verschluesselung.html]] * [[https://weakdh.org/]] * [[https://weakdh.org/sysadmin.html]] - Apache HTTP Server (mod_ssl) - nginx - Microsoft IIS - Lighttpd - Apache Tomcat - Postfix SMTP - Sendmail - Dovecot - HAProxy - Amazon Elastic Beanstalk - OpenSSH Generating a Unique DH Group > openssl dhparam -out dhparams.pem 4096 ab Apache 2.4.8 und OpenSSL 1.0.2: SSLOpenSSLConfCmd DHParameters "/pfad/zum/dhparams.pem" Lighttpd: > vi /etc/lighttpd/lighttpd.conf ... ssl.dh-file="/pfad/zum/dhparams.pem" ... ===== allgemeines ===== ==== SSL/TLS ==== **TLS** hat soviele Probleme, man sollte es mind. in der Version __**1.2**__ einsetzen! ==== Verschlüsselungsverfahren ==== * __**Serpent**__ - ist der sicherste; * **Twofish** - ist der zweitsicherste; * **Rijndael** - ist weniger sicher als Serpent oder Twofish, es ist seit dem //02. Oktober 2000// der DES-Nachfolger und somit der US-Standard "AES" (Advanced Encryption Standard); ==== Blockverschlüsselung ==== * **EBC** - jeder Block wird mit dem selben Schlüssel verschlüsselt (das ist nicht sehr schlau) * __**CBC**__ - jeder Block wird mit einem eigenen Schlüssel verschlüsselt ===== OpenSSH ab Version 6.6 (ab Ubuntu 14.04 LTS) ===== ==== elliptische Kurven ==== Zur Zeit kann SSH nur den Ellyptischen-Kurven-Algorithmus ED25519, der ED448 und E-521 werden sicher später noch kommen.\\ Die DSA-Schlüssel sind alle NSA-optimiert und somit als unsicher anzusehen. Auch von den Schlüsseln mit elliptischen Kurven wird vermutet, dass sie NSA-optimiert sind. RSA mit großer Schlüssellänge ist z.Z. die sicherste Alternative. der ED25519-Schlüssel hat eine __feste Länge von 256 Bit__, hier wird die Option ''-b'' __ignoriert__: > ssh-keygen -t ed25519 -a 1024 aus einem privaten Schlüssel einen öffentlichen generieren: > ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub Die Option **''-a''** beschreibt, mit wieviel Rotationen die Passphrase verschlüsselt wird.\\ Je größer diese Anzahl ist, desto stärker ist die Passphrase gegen Brut-Force-Angriffe gesichert aber desto langsammer ist auch der Verbindungsaufbau.\\ Die Zeit, die zum generieren des Schlüssels benötigt wird, die Zeit fällt auch bei einem Verbindungsaufbau mit dem generierten Schlüssel an.\\ Also wenn das generieren eines Schlüssels mit 65536 Runden ca. 10 Minuten dauert, dann wird der Vebindungsaufbau mit diesem Schlüssel von diesem Rechner (Intel Core i7-2620M 2.70GHz) aus, auch ca. 10 Minuten benötigen! In soeinem Fall sollte man die Anzahl der Runden auf einen Wert reduzieren, bei dem die Zeit zum generieren bzw. für den Verbindungsaufbau, in einem verträglichen Zeitrahmen liegt. Auf einem Rechner mit einer "Intel Core i7-2620M 2.70GHz"-CPU, dauert der Login mit einem ED25519-Schlüssel mit 1024 Runden, ca. 10 Sekunden und mit 65536 Runden ca. 10 Minuten. Die DSA-Schlüssel sind alle NSA-optimiert und somit als unsicher anzusehen. Auch von den Schlüsseln mit elliptischen Kurven wird vermutet, dass sie NSA-optimiert sind. Weiterhin gilt die Einschränkung, dass bei den Algorithmen, die auf elliptischen Kurven basieren, die Schlüssellänge nicht konfigurierbar ist. Auch wenn von RSA nicht vermutet wird, das es NSA-optimiert ist, so arbeitet RSA doch deterministisch und ist deshalb unter Umständen für bestimmte Angriffe anfällig. In der Praxis wird RSA daher mit dem "Optimal Asymmetric Encryption Padding" kombiniert. Daraus ergibt sich, dass ein RSA-Algorithmus, der Padding verwendet, grundsätzlich als sicherer einzustufen ist als alle anderen genannten Algorithmen. Ein 160 Bit langer Schüssel, der auf elliptischen Kurven basieren (ECDH), gilt als ähnlich sicher wie ein 1024 Bit langer RSA-Schlüssel (RSA/DH): 160 Bit ECDH - 1024 Bit RSA/DH 224 Bit ECDH - 2048 Bit RSA/DH 256 Bit ECDH - 3072 Bit RSA/DH 384 Bit ECDH - 7680 Bit RSA/DH ECDH-Schlüssel eignet sich daher besonders dann, wenn die Speicher- oder Rechenkapazität begrenzt ist, z. B. in Smartcards oder anderen eingebetteten Systemen. ===== OpenSSH bis Version 6.5 (bis Ubuntu 12.04 LTS) ===== einen eigenen RSA-Schlüssel generieren: > ssh-keygen -t rsa -b 8192 aus einem privaten Schlüssel einen öffentlichen generieren: > ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub ==== Verbindungen mit TTL ==== so werden alle SSH-Verbindungen nach 300 Sekunden (5 Minuten) "nichts tun" automatisch getrennt: > vi /etc/ssh/sshd_config ClientAliveInterval 300 ClientAliveCountMax 0 so bleiben alle SSH-Verbindungen solange offen, wie der Rechner eingeschaltet ist: > vi /etc/ssh/sshd_config #ClientAliveInterval 300 #ClientAliveCountMax 0 Nicht vergessen, nach einer Änderung an dieser Konfigurationsdatei den SSH-Dienst neu zu starten. ==== ChRoot mit SSH/BASH ==== Benutzer anlegen: # useradd -m -c "BESCHREIBUNG" fritz # mkdir -p /home/fritz/arbeit SSH-Schlüssel anlegen: # su - fritz # ssh-keygen -t rsa -b 4096 # exit Die Rechte für die ChRoot-Funktion passend setzen: # chown -R 0:0 /home/fritz # chown -R fritz:fritz /home/fritz/.ssh # chown -R fritz:fritz /home/fritz/.bash* # chown -R fritz:fritz /home/fritz/arbeit Binärdateien in die ChRoot-Umgebung kopieren: # tar cvzf bash.tgz /bin/ /lib/ /lib64/ /usr/bin/ ; tar xzf bash.tgz -C /home/fritz/ das "/dev" in der ChRoot-Umgebung anlegen: # mknod dev/null c 1 3 # mknod dev/zero c 1 5 # chmod 0666 dev/{null,zero} === /etc/ssh/sshd_config === ganz unten an die Datei anhängen: ... Match user fritz ChrootDirectory %h X11Forwarding no AllowTcpForwarding no SSHD neu starten: > /etc/init.d/ssh restart ==== ChRoot mit SCP/SFTP ==== Benutzer anlegen: # useradd -m -c "BESCHREIBUNG" -g sftpgruppe fritz # mkdir -p /home/fritz/arbeit # chown -R fritz:0 /home/fritz # chown 0:0 /home/fritz # chown -R fritz:sftpgruppe /home/fritz/arbeit # chmod 0775 /home/fritz/arbeit Benutzer anlegen: # chown -R fritz /home/fritz # userdel -r fritz === /etc/ssh/sshd_config === ganz unten an die Konfigurationsdatei anhängen: Match user fritz ChrootDirectory %h X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp -l VERBOSE ==== unerwünschte Wartezeit (wegen IPv6) vor dem Login ==== * [[http://ubuntuforums.org/showthread.php?t=1865873]] Die neuen SSH-Versionen versuchen erst per IPv6 eine Verbindung aufzubauen, erst wenn das nicht geht, versuchen sie es per IPv4. Mit dieser Option verwendet SSH-Client nur noch IPv4: # vi /etc/ssh/ssh_config ... AddressFamily inet ... Damit der SSHD auch nur mit IPv4 arbeitet: # vi /etc/ssh/sshd_config ... AddressFamily inet ... ==== OpenSSH 5.5p1 aus den Quellen bauen ==== Seit der Version 5.4 kann open SSH mit seinem sftp-Server auch die ''umask'' setzen, allerdings hat die Version 5.4 wohl ein paar Sicherheitsprobleme, woraufhin recht schnell die Version 5.5 veröffentlicht wurde. Hier zeige ich Beispielhaft, wie man sich auf einem Ubuntu 9.04 ein aktuelles OpenSSH 5.5p1 (openssh-5.5p1.tar.gz) aus den Quellen selber baut. Agent admitted failure to sign using the key. * [[http://mein.homelinux.com/blog/177-agent-admitted-failure-to-sign-using-the-key.html]] === Problem === Es ist kein automatischer Login möglich, obwohl alle relevanten Verzeichniss- und Dateirechte richtig gesetzt sind: fratz@client:~$ ssh fritz@server Agent admitted failure to sign using the key. Password: === Lösung === Schlüssel bei Seite legen: fratz@client:~$ mv .ssh/id_rsa .ssh/id_rsa.bak fratz@client:~$ mv .ssh/id_rsa.pub .ssh/id_rsa.pub.bak einmal kurz mit Passwort einloggen: fratz@client:~$ ssh fritz@server Password: fritz@server:~$ fritz@server:~$ exit logout Connection to server closed. Schlüssel wieder hervor holen: fratz@client:~$ mv .ssh/id_rsa.bak .ssh/id_rsa fratz@client:~$ mv .ssh/id_rsa.pub.bak .ssh/id_rsa.pub jetzt geht der passwortlose Login wieder: fratz@client:~$ ssh fritz@server fritz@server:~$ ==== konvertieren zwischen OpenSSH, SSH2/RFC4716 und RSA/PAM ==== Hier einmal beispielhaft alle Konvertierungsvarianten, die mir eingefallen sind bzw. die bei mir funktioniert haben. * ''-e'' -> export ''SSH2/RFC4716'' (ist der Standard) * ''-i'' -> import ''SSH2/RFC4716'' (ist der Standard) * ''-m'' -> Formate ''RFC4716'' (für SSH2) * ''-m'' -> Formate ''PAM'' (für RSA) ''OPENSSH PRIVATE KEY'' + ''OPENSSH PUBLIC KEY'' - generieren: > ssh-keygen -t rsa -b 4096 Enter file in which to save the key (/home/fritz/.ssh/id_rsa): ''OPENSSH PRIVATE KEY'' + ''OPENSSH PUBLIC KEY'' - generieren: > ssh-keygen -t rsa -m RFC4716 -b 4096 Enter file in which to save the key (/home/fritz/.ssh/id_rsa): /home/fritz/.ssh/id_rsa_rfc4716 ''RSA PRIVATE KEY'' + ''OPENSSH PUBLIC KEY'' - generieren: > ssh-keygen -t rsa -m PEM -b 4096 Enter file in which to save the key (/home/fritz/.ssh/id_rsa): /home/fritz/.ssh/id_rsa_pem ''OPENSSH KEY'' in ''SSH2 PUBLIC KEY'' konvertieren: > ssh-keygen -e -f .ssh/id_rsa > .ssh/SSH2_PUBLIC_KEY.pub > ssh-keygen -e -f .ssh/id_rsa.pub > .ssh/SSH2_PUBLIC_KEY.pub ''OPENSSH KEY'' in ''SSH2 PUBLIC KEY'' konvertieren: > ssh-keygen -e -m RFC4716 -f .ssh/id_rsa > .ssh/SSH2_PUBLIC_KEY_-_RFC4716.pub > ssh-keygen -e -m RFC4716 -f .ssh/id_rsa.pub > .ssh/SSH2_PUBLIC_KEY_-_RFC4716.pub ''OPENSSH KEY'' in ''RSA PUBLIC KEY'' konvertieren: > ssh-keygen -e -m PEM -f .ssh/id_rsa > .ssh/RSA_PUBLIC_KEY_-_PEM.pub > ssh-keygen -e -m PEM -f .ssh/id_rsa.pub > .ssh/RSA_PUBLIC_KEY_-_PEM.pub ''SSH2 KEY'' in ''OPENSSH PUBLIC KEY'' konvertieren: > ssh-keygen -i -f .ssh/SSH2_PUBLIC_KEY_-_RFC4716.pub > .ssh/id_rsa.pub ''SSH2 KEY'' in ''OPENSSH PUBLIC KEY'' konvertieren: > ssh-keygen -i -m RFC4716 -f SSH2_PUBLIC_KEY_-_RFC4716.pub > .ssh/id_rsa.pub ''RSA KEY'' in ''OPENSSH PUBLIC KEY'' konvertieren: > ssh-keygen -i -m PEM -f SSH2_PUBLIC_KEY_-_RFC4716.pub > .ssh/id_rsa.pub ==== automatische Passwortübergabe mit sshpass ==== Wenn man auf dem Zielsystem keinen eigenen Schlüssel liegen hat oder wegen der Verzeichnisrechte eine Pub-Key-Auth nicht funktionieren würde, dann kann man das einloggen mit //sshpass// trotzdem automatisieren: > sshpass -p geheim ssh 192.168.0.100 'df -h' installation mit FreeBSD 13: > pkg install security/sshpass ==== Bug ==== * [[http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=422327%E2%90%A3]] Wenn man //IPv6// abschaltet (sysctl.conf per net.ipv6.conf.all.disable_ipv6=1), funktioniert //X11Forwarding// auch nicht mehr. ==== Vorbereitungen ==== Als erstes alle Pakete installieren die zum bauen gebraucht werden: # aptitude -y install build-essential install zlib1g-dev pam-dev libwrap0-dev libcurl4-openssl-dev libpam-dev wget hier ist die Baustelle: # cd /usr/src/ jetzt saugen wir uns die Quellen (siehe [[http://openssh.org/de/portable.html]]): # wget ftp://ftp-stud.fht-esslingen.de/pub/OpenBSD/OpenSSH/portable/openssh-5.5p1.tar.gz Quellen auspacken: # tar xzf openssh-5.5p1.tar.gz -C /usr/src/ ins Quellverzeichnis wechseln: # cd openssh-5.5p1 ==== bauen ==== Dann die Optionen lesen, um die richtigen auszuwählen: # ./configure --help Jetzt die gewünschten Optionen setzen: # ./configure --prefix=/opt/openssh_5.5p1 --with-tcp-wrappers --with-ssl-engine --with-pam --with-mantype=man --with-privsep-path=/var/run/sshd Am Ende sollte dann soetwas in der Art stehen: OpenSSH has been configured with the following options: User binaries: /opt/openssh_5.5p1/bin System binaries: /opt/openssh_5.5p1/sbin Configuration files: /opt/openssh_5.5p1/etc Askpass program: /opt/openssh_5.5p1/libexec/ssh-askpass Manual pages: /opt/openssh_5.5p1/share/man/manX PID file: /var/run Privilege separation chroot path: /var/run/sshd sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/opt/openssh_5.5p1/bin Manpage format: man PAM support: yes OSF SIA support: no KerberosV support: no SELinux support: no Smartcard support: S/KEY support: no TCP Wrappers support: yes MD5 password support: no libedit support: no Solaris process contract support: no IP address in $DISPLAY hack: no Translate v4 in v6 hack: yes BSD Auth support: no Random number source: OpenSSL internal ONLY Host: x86_64-unknown-linux-gnu Compiler: gcc Compiler flags: -g -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wno-pointer-sign -Wformat-security -fno-strict-aliasing -fno-builtin-memset -fstack-protector-all -std=gnu99 Preprocessor flags: Linker flags: -fstack-protector-all Libraries: -lcrypto -ldl -lutil -lz -lnsl -lcrypt -lresolv +for sshd: -lwrap -lpam Sicherheitshalber erstmal sauber machen: # make clean Wenn alles ohne Fehler durchgelaufen ist, geht es mit dem eigentlichen //bauen// weiter. Sonst muss natürlich erst der Fehler behoben werden, meist fehlt nur ein ''*-dev''-Paket, welches man mit aptitude schnell nachinstallieren kann. # make Ist das auch ohne Fehler durchgelaufen, dann kann man jetzt installieren: # make install ==== Anpassungen im System ==== Zum Schluss muss nur noch das //Start-/Stop-Script// angepasst werden: # vi /etc/init.d/ssh In der alten Datei gibt es unter anderem diese Zeilen: set -e # /etc/init.d/ssh: start and stop the OpenBSD "secure shell(tm)" daemon test -x /usr/sbin/sshd || exit 0 ( /usr/sbin/sshd -\? 2>&1 | grep -q OpenSSH ) 2>/dev/null || exit 0 umask 022 Das ändern wir in: set -e #SSHD="/usr/sbin/sshd" SSHD="/opt/openssh_5.5p1/sbin/sshd" # /etc/init.d/ssh: start and stop the OpenBSD "secure shell(tm)" daemon test -x ${SSHD} || exit 0 ( ${SSHD} -\? 2>&1 | grep -q OpenSSH ) 2>/dev/null || exit 0 export PATH="/opt/openssh_5.5p1/bin:$PATH" umask 022 Im Rest der Datei muss jetzt nur noch /usr/sbin/sshd gegen ${SSHD} ausgetauscht werden. Jetzt kann man ganz einfach zwischen der alten Version un der neuen Version umschalten. neue Version (selbst gebaute Version) aktivieren: #SSHD="/usr/sbin/sshd" SSHD="/opt/openssh_5.5p1/sbin/sshd" alte Version (Betriebssystem-Version) aktivieren: SSHD="/usr/sbin/sshd" #SSHD="/opt/openssh_5.5p1/sbin/sshd"