Nützliche Einzeiler
Inhaltsverzeichnis
- 1 SSH forwarding von IPv4 Host zu IPv6 Host (www.example.org) über ein Intermediate Dualstack System
- 2 SSH Remote Port-Forwarding Server <-> Client-ohne-public-port-access
- 3 netcat filetransfer
- 4 netcat proxy
- 5 Dateifreigabe mit Python HTTP-Server
- 6 Ersetze "foo" mit "bar" in einer Datei
- 7 Ersetze "foo" mit "bar" NUR in Zeilen die "baz" enthalten
- 8 Ersetze "foo" mit "bar" AUSSER in Zeilen die "baz" enthalten
- 9 Ausgabe der Zeilen 45-50 einer Datei
- 10 Directory sharing via http
- 11 csv to vcard converter
- 12 grep access_log und print host info
- 13 Netzwerk Statistiken aus /proc/net/netstat dargestellt
- 14 finde alle symlinks die auf DATEI zeigen
- 15 finde alle symlinks die auf DIRECTORY zeigen
- 16 8 Byte Passwort generieren
- 17 Perl Oneliner um ein Unix-Socket File (Typ: s) zu erstellen
- 18 SSH mit Keys statt Passwort zu entferntem Host
- 19 MAC Adresse des ethx Interface ermitteln
- 20 Serielle Console mit Python (aka minicom)
- 21 Top 10 Prozesse die realen (physikalischen) Speicher im RAM belegen (RSS - Resident Set Size)
- 22 Alle Grub Menueinträge (menuentries) auflisten
- 23 Datei mit Passwort verschlüsseln
- 24 UNIX-Socket Verbindungen finden
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
- local (192.168.1.117):
nc -l -p 7788 > file.txt
- 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}'
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'.