Nützliche Einzeiler

Aus Si:Wiki von Siegrist SystemLösungen - Informatik und Rezepte
Wechseln zu: Navigation, Suche

SSH forwarding von IPv4 Host zu IPv6 Host (www.example.org) über ein Intermediate Dualstack System

create the tunnel via intermediate system on your local IPv4 host:

ssh -4 user@intermediate-system -L 2222:[2606:2800:220:1:248:1893:25c8:1946]:22

connect to IPv6 host www.example.org (2606:2800:220:1:248:1893:25c8:1946) on port 22:

ssh user@localhost:2222

SSH Remote Port-Forwarding Server <-> Client-ohne-public-port-access

Bei Internetanschlüssen die keine statische IP-Adresse haben oder CGNAT (bspw. Swisscom) benutzen, kann auf diesen ein Tunnel zu einem öffentlich zugänglichen Server aufgebaut werden, so dass von diesem Server trotzdem eine SSH (oder irgendeine andere) Verbindung zu diesem Anschluss aufgebaut werden kann.
Auf dem Client:

ssh -nNT -R 127.0.0.1:22222:localhost:22 -i /home/user/.ssh/id_ed25519 serveruser@server.ch &

Auf dem Server kann dann mit ssh -p 22222 clientuser@127.0.0.1
die SSH-Session aufgebaut werden.
Die Parameter -nNT erlauben für den User "serveruser" keine Shell in der /etc/passwd zu setzen.

netcat filetransfer

  1. local (192.168.1.117): nc -l -p 7788 > file.txt
  2. remote: nc 192.168.1.117 7788 < file.txt

netcat proxy

nc -l -p 1234 | nc www.server.com 80

Dateifreigabe mit Python HTTP-Server

Python2: python -m SimpleHTTPServer [port]
Python3: python3 -m http.server [port]

Ersetze "foo" mit "bar" in einer Datei

sed -i 's/foo/bar/g' filename
sed 's/foo/bar/g' filename > filename-neu

Ersetze "foo" mit "bar" NUR in Zeilen die "baz" enthalten

sed -i '/baz/s/foo/bar/g' filename

Ersetze "foo" mit "bar" AUSSER in Zeilen die "baz" enthalten

sed -i '/baz/!s/foo/bar/g' filename

Ausgabe der Zeilen 45-50 einer Datei

sed -n '45,50p' filename

Directory sharing via http

ipv4: python -m SimpleHTTPServer 80
ipv6: ???

csv to vcard converter

cat addr_book.csv | awk -F"," '{ print "BEGIN:VCARD\nN:" $3 ";" $2 ";" $1 "\nFN:" $3 "\nEMAIL;TYPE=INTERNET:" $5 "\nEND:VCARD"}' > addr_book.vcf

grep access_log und print host info

grep "GET /<URL-PATH>" /var/log/apache2/access_log | awk '{system("host " "\""$1"\"")}' | uniq

Netzwerk Statistiken aus /proc/net/netstat dargestellt

awk '(f==0) { i=1; while ( i<=NF) {n[i] = $i; i++ }; f=1; next} (f==1){ i=2; while ( i<=NF){ printf "%s = %d\n", n[i], $i; i++}; f=0}' /proc/net/netstat

finde alle symlinks die auf DATEI zeigen

find / -type l -print 2>/dev/null | while read symlink; do echo -n "$symlink"; targ=$(readlink -f "$symlink"); echo "-> $targ"; done | grep "DATEI"

finde alle symlinks die auf DIRECTORY zeigen

find / -type l -xtype d -print 2>/dev/null | while read symlink; do echo -n "$symlink"; targ=$(readlink -f "$symlink"); echo "-> $targ"; done | grep "DIRECTORY"

8 Byte Passwort generieren

openssl rand -base64 6

Perl Oneliner um ein Unix-Socket File (Typ: s) zu erstellen

perl -MIO::Socket::UNIX -e 'IO::Socket::UNIX->new(Type => SOCK_STREAM(),Local => "/tmp/einsocket");'

SSH mit Keys statt Passwort zu entferntem Host

Im Homeverzeichnis des Users (SSH-Client):

Schauen was schon an Keys besteht

ls -la .ssh/

RSA Schlüsselpaar erstellen (RSA mit 4096 Bit)

ssh-keygen -t rsa -b 4096

Public-Key zum entfernten Host (SSH-Server) transferieren

cat .ssh/id_rsa.pub | ssh <user>@<host> 'cat >> .ssh/authorized_keys'


... oder noch besser ... mitttels elliptischer Kurven ein Ed25519 Schlüsselpaar:

ssh-keygen -t ed25519

Public-Key zum entfernten Host transferieren

cat .ssh/id_ed25519.pub | ssh <user>@<host> 'cat >> .ssh/authorized_keys'

MAC Adresse des ethx Interface ermitteln

ip a s dev ethx | awk '$1=="link/ether" {print $2}'

Serielle Console mit Python (aka minicom)

python -m serial.tools.miniterm -e -p /dev/ttyXXXX -b 115200

Top 10 Prozesse die realen (physikalischen) Speicher im RAM belegen (RSS - Resident Set Size)

ps axo rss,comm,pid | awk '{ proc_list[$2] += $1; } END { for (proc in proc_list) { printf("%d\t%s\n", proc_list[proc],proc); }}' | sort -n | tail -n 10 | sort -rn | awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}'

Alle Grub Menueinträge (menuentries) auflisten

awk -F\' '/^menuentry / {print $2}' /boot/grub/grub.cfg|cat -n|awk '{print $1-1,$1="",$0}'

Datei mit Passwort verschlüsseln

'meine-datei.txt' Verschlüsseln:

openssl aes-256-cbc -e -pass "pass:<mein-passwort>" -pbkdf2 -in meine-datei.txt > meine-datei.txt.enc

... oder mit interaktiver Passworteingabe:

openssl aes-256-cbc -e -pbkdf2 -in meine-datei.txt > meine-datei.txt.enc


'meine-datei.txt.enc' wieder Entschlüsseln:

openssl aes-256-cbc -d -pass "pass:<mein-passwort>" -pbkdf2 -in meine-datei.txt.enc > meine-datei.txt

... oder mit interaktiver Passworteingabe:

openssl aes-256-cbc -d -pbkdf2 -in meine-datei.txt.enc > meine-datei.txt

UNIX-Socket Verbindungen finden

Ein ls auf den Socket-Filedeskriptor der PID:

ls -l /proc/<PID>/fd/<FD> ergibt z.B.: /proc/3913/fd/4 -> 'socket:[1317840]'

... dann mit dem Socket-Inode (hier 1317840):

netstat -nxp | grep 1317840 ergibt: unix 2 [ ] DGRAM 1317840 3913/cron

... den 'Program name' nehmen und mit diesem (hier 'cron') ein:

lsof +E -aUc 'cron' . Voilà, ergibt:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1458 root 3u unix 0x000000003505f3cd 0t0 14315 /dev/log type=DGRAM ->INO=15343 2879,rtkit-dae,3u

cron 3913 root 4u unix 0x00000000316ca941 0t0 1317840 type=DGRAM ->INO=14315 1458,rsyslogd,3u
Es besteht also eine UNIX-Socket Verbindung zwischen 'cron' und 'rsyslogd'.