shell

tmux statt screen

Written by  on Juli 10, 2020

In RHEL8 ist screen nicht mehr enthalten und ein Umstieg auf tmux wird empfohlen.

tmux screen
Strg+B d Strg+A d
tmux attach screen -r

Mount

Written by  on September 21, 2019

Mach.
Hab ich schon.
Machs rückgängig!
Geht nicht, ist nichts gemacht.
Mach.
Hab ich schon.

root@nas:~# mount -a
mount: /dev/md127 is already mounted or /data busy
root@nas:~# umount /data
umount: /data: not mounted
root@nas:~# mount /data
mount: /dev/md127 is already mounted or /data busy

Wird ja nichts damit zu tun haben?

[   44.106137] sd 2:0:0:0: [sdc] Media Changed
[   44.110342] sd 2:0:0:0: [sdc]  Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[   44.117621] sd 2:0:0:0: [sdc]  Sense Key : Unit Attention [current]
[   44.124023] Info fld=0x0
[   44.126570] sd 2:0:0:0: [sdc]  Add. Sense: Not ready to ready change, medium may have changed
[   44.135167] sd 2:0:0:0: [sdc] CDB: Read(10): 28 00 00 30 00 20 00 00 08 00
[   44.142197] end_request: I/O error, dev sdc, sector 3145760
[   44.147806] Buffer I/O error on device sdc1, logical block 393216
[   44.551986] EXT2-fs (sdc1): warning: mounting unchecked fs, running e2fsck is recommended

openssl nameopt

Written by  on Dezember 18, 2018

OpenSSL unterstützt eine nette Option, falls man den Output in einem Script weiterverarbeiten will.
Hier die normale Ausgabe:

openssl x509 -in test.cer -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            55:0d:00:d6:79:bf:17:7b
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = Google Trust Services, CN = Google Internet Authority G3
        Validity
            Not Before: Nov 27 14:02:00 2018 GMT
            Not After : Feb 19 14:02:00 2019 GMT
        Subject: C = US, ST = California, L = Mountain View, O = Google LLC, CN = *.google.com

Und hier die Multiline Ausgabe:

openssl x509 -in test.cer -noout -text -nameopt multiline
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            55:0d:00:d6:79:bf:17:7b
    Signature Algorithm: sha256WithRSAEncryption
        Issuer:
            countryName               = US
            organizationName          = Google Trust Services
            commonName                = Google Internet Authority G3
        Validity
            Not Before: Nov 27 14:02:00 2018 GMT
            Not After : Feb 19 14:02:00 2019 GMT
        Subject:
            countryName               = US
            stateOrProvinceName       = California
            localityName              = Mountain View
            organizationName          = Google LLC
            commonName                = *.google.com

Dokumentation

Zu welchem Paket gehört eine Datei

Written by  on Dezember 7, 2018

Wie finde ich schnell raus, zu welchem Paket eine Datei gehört?

dpkg -S $(which dig)

Ubuntu 18.10 Cosmic Cuttlefish

Written by  on Oktober 22, 2018

Ubuntu 18.10 Cosmic Cuttlefish und die Hostname Umbenennung
Eben das neue Ubuntu aufgesetzt. In einer Virtual Box. Aber eigentlich brauch ich gleich zwei solche Maschinen. Also was liegt näher als die VM zu klonen. Geht ja einfach, sogar eine neue MAC Adresse wird generiert. Jetzt noch schnell den zweiten Server umbenannt in /etc/hostname -> reboot -> hostname ist wieder der von Maschine 1.
Suchen, googlen, setzen mit hostname command. Reboot. Und immer wieder zurück auf dem alten Hostname. Was ist da los Ubuntu?
Es finden sich erste Hinweise dass das an cloud-init liegt. Was macht das mit meinem hostname, bitteschön? Auch DHCP wird nicht frisch geholt, aber das ist eine andere Geschichte…
/var/lib/cloud/instances/3f1ebbef-73c0-49db-9207-fde1dce2b8f4/cloud-config.txt
Exakt hier kann man den hostnamen ändern. Reboot und es wurde übernommen!
Update: Einen Reboot später -> wieder der alte Hostname!
Update: Um Ubuntu zu klonen und umzubenennen muss man diesen cloud configuration service abändern:
/etc/cloud/cloud.cfg

# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true

grep binary file

Written by  on Oktober 5, 2018
Binary file (standard input) matches
-a | --text
Process a binary file as if it were text; this is equivalent to the ‘--binary-files=text’ option.

JPEG Dateierweiterung erzeugen

Written by  on Juli 22, 2018

Einen Haufen Files im LOST Ordner. Ohne erweiterung. Aber fast alles Fotos…
Bitte einmal mit Mobaxterm und der Bash auf .jpg Umbenennen:

ls -1 | while read LINE; do mv $LINE $LINE.jpg; done

Multi Command Readline

Written by  on März 31, 2018

Das kann nerven: Man will eine Liste mit DNS Einträgen überprüfen. Was aber wenn es gar keinen Eintrag gibt? Meist ist es nicht akzeptabel, wenn die Zeile dann einfach weggelassen wird. Also muss man aus dem üblichen Einzeiler eine ganze Schleife basteln, die auch dann eine Ausgabe liefert, wenn dig keine mehr Produziert.

while read LINE
do {
  echo -n "$LINE "
  dig SOA $LINE +short
  }
done < $INPUTFILE

Verify X509 Certificate

Written by  on September 8, 2017

Es ist nicht ausreichend nur den Private Key zu überprüfen!
OpenSSL bietet auch eine einfache Möglichkeit einen CSR zu prüfen:

openssl req -in example.csr -verify
verify OK

Beim Public Key wird es komplizierter. Einzig eine Prüfung mit der Signatur der übergeordneten CA hilft. Hier eine erste Version eines Prüfscriptes.

#!/bin/bash
if [[ $# -ne 1 ]]; then
  echo "Wrong number of arguments."
  exit 1
fi

FILE=$1

# Allows to configure different openssl version
OPENSSL=$(which openssl)
TEMPDIR="/tmp
USERAGENT="CustomUserAgent"
# A proxy server would also get configured here
WGETOPTS="--user-agent=${USERAGENT} --timeout=5 --tries=1 -e"

SIGNER=$($OPENSSL x509 -in ${FILE} -text -noout | grep "CA Issuers - URI:http" | cut -d":" -f2- | tr -d '\r')
if [[ -z $SIGNER ]]; then
  echo "No issuer certificate found for download."
  exit 1
fi
SIGNERFILE=$(awk -F'/' '{print $NF}' <<<$SIGNER)

/usr/bin/wget $WGETOPTS $SIGNER -O $TEMPDIR/$SIGNERFILE >/dev/null 2>&1

# Try to convert to PEM
$OPENSSL x509 -inform der -in $TEMPDIR/$SIGNERFILE -out $TEMPDIR/$SIGNERFILE.cer 2>/dev/null
if [[ -s $TEMPDIR/$SIGNERFILE.cer ]]; then
  # use converted file, if conversation was successfull
  SIGNERFILE="$SIGNERFILE.cer"
fi
echo -n "Certificate verification: "
$OPENSSL verify -CAfile $TEMPDIR/$SIGNERFILE -partial_chain $FILE 2>&1 | grep -e "certificate signature failure" -e "OK" | cut -d":" -f2

# Cleanup
if [[ ! -z $SIGNERFILE ]]; then
  /bin/rm $TEMPDIR/$SIGNERFILE*
fi

Pipe View

Written by  on August 17, 2017

Beobachten wie viele Daten durch eine Pipe in einem Shellscript durchgehen:

dd if=example.img bs=1M | pv | dd of=/dev/sdXX

Beispiel Output:

1.16GiB 0:09:37 [4.76MiB/s] [                                   <=>           ]