Nützliche Einzeiler: Unterschied zwischen den Versionen

Aus Si:Wiki von Siegrist SystemLösungen - Informatik und Rezepte
Wechseln zu: Navigation, Suche
(csv to vcard converter)
K
 
(59 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=== netcat filetransfer ===
+
==== SSH forwarding von IPv4 Host zu IPv6 Host (www.example.org) über ein Intermediate Dualstack System ====
#local: <code><nowiki> nc -l -p 77 -e "tee gaga" -v </nowiki></code><br>
+
create the tunnel via intermediate system on your local IPv4 host:
#remote: <code><nowiki> cat file.tar.gz | netcat 192.168.1.113 77 </nowiki></code>
+
:<code><nowiki>ssh -4 user@intermediate-system -L 2222:[2606:2800:220:1:248:1893:25c8:1946]:22</nowiki></code><br>
 +
connect to IPv6 host www.example.org (2606:2800:220:1:248:1893:25c8:1946) on port 22:
 +
:<code><nowiki>ssh user@localhost:2222</nowiki></code>
  
=== netcat proxy ===
+
==== SSH Remote Port-Forwarding Server <-> Client-ohne-public-port-access  ====
<code><nowiki> nc -l -p 1234 | nc www.server.com 80 </nowiki></code>
+
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.<br>
 +
Auf dem Client:
 +
:<code><nowiki>ssh -nNT -R 127.0.0.1:22222:localhost:22 -i /home/user/.ssh/id_ed25519 serveruser@server.ch & </nowiki></code><br>
 +
Auf dem Server kann dann mit <code><nowiki>ssh -p 22222 clientuser@127.0.0.1 </nowiki></code><br>
 +
die SSH-Session aufgebaut werden.<br>
 +
Die Parameter <code><nowiki> -nNT </nowiki></code> erlauben für den User "serveruser" keine Shell in der /etc/passwd zu setzen.<br>
  
=== History Hitliste ===
+
==== netcat filetransfer ====
<code><nowiki> history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10  </nowiki></code>
+
#local (192.168.1.117): <code><nowiki> nc -l -p 7788 > file.txt </nowiki></code><br>
 +
#remote: <code><nowiki> nc 192.168.1.117 7788 < file.txt </nowiki></code>
  
=== Ersetze "foo" mit "bar" NUR in Zeilen die "baz" enthalten ===
+
==== netcat proxy ====
<code><nowiki> sed '/baz/s/foo/bar/g' </nowiki></code>
+
:<code><nowiki> nc -l -p 1234 | nc www.server.com 80 </nowiki></code>
  
=== Ersetze "foo" mit "bar" AUSSER in Zeilen die "baz" enthalten ===
+
==== Dateifreigabe mit Python HTTP-Server ====
<code><nowiki> sed '/baz/!s/foo/bar/g'  </nowiki></code>
+
:Python2: <code><nowiki> python -m SimpleHTTPServer [port] </nowiki></code>
 +
:Python3: <code><nowiki> python3 -m http.server [port] </nowiki></code>
  
=== Ausgabe der Zeilen 45-50 einer Datei ===
+
==== Ersetze "foo" mit "bar" in einer Datei ====
<code><nowiki> sed -n '45,50p' filename </nowiki></code>
+
:<code><nowiki> sed -i 's/foo/bar/g' filename </nowiki></code>
 +
:<code><nowiki> sed 's/foo/bar/g' filename > filename-neu </nowiki></code>
  
=== Directory sharing via http ===
+
==== Ersetze "foo" mit "bar" NUR in Zeilen die "baz" enthalten ====
ipv4:<code><nowiki> python -m SimpleHTTPServer 1234  </nowiki></code><br>
+
:<code><nowiki> sed -i '/baz/s/foo/bar/g' filename </nowiki></code>
ipv6:<code><nowiki> ???  </nowiki></code>
+
  
=== csv to vcard converter ===
+
==== Ersetze "foo" mit "bar" AUSSER in Zeilen die "baz" enthalten ====
<code><nowiki> cat si_pers_book.csv | awk -F"," '{ print "BEGIN:VCARD\nN:" $3 ";" $2 ";" $1 "\nFN:" $3 "\nEMAIL;TYPE=INTERNET:" $5 "\nEND:VCARD"}' > si_pers_book.vcf  </nowiki></code>
+
:<code><nowiki> sed -i '/baz/!s/foo/bar/g' filename </nowiki></code>
  
#--- grep access_log und print host info
+
==== Ausgabe der Zeilen 45-50 einer Datei ====
grep "GET /index.shtml?tcpportscan=" /var/log/apache2/access_log | awk '{system("host  " "\""$1"\"")}' | uniq
+
:<code><nowiki> sed -n '45,50p' filename  </nowiki></code>
  
#--- die 1000 meistgenutzten Ports aus nmap-services als String komma-separiert
+
==== Directory sharing via http ====
cat /usr/share/nmap/nmap-services | sort -nr -k 3 | grep "/tcp" |awk '{print $2}' | sed 1000q | awk -F/ '{print $1}' | sort -n | perl -n -e 'chomp; print "$_,";'
+
:ipv4:<code><nowiki> python -m SimpleHTTPServer 80  </nowiki></code><br>
 +
:ipv6:<code><nowiki> ???  </nowiki></code>
  
#--- finde alle symlinks die auf DATEI zeigen
+
==== csv to vcard converter ====
find / -type l -print 2>/dev/null | while read symlink; do echo -n "$symlink"; targ=$(readlink -f "$symlink"); echo "-> $targ"; done | grep "DATEI"  
+
:<code><nowiki> cat addr_book.csv | awk -F"," '{ print "BEGIN:VCARD\nN:" $3 ";" $2 ";" $1 "\nFN:" $3 "\nEMAIL;TYPE=INTERNET:" $5 "\nEND:VCARD"}' > addr_book.vcf  </nowiki></code>
  
#--- finde alle symlinks die auf DIRECTORY zeigen
+
==== grep access_log und print host info ====
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"
+
:<code><nowiki> grep "GET /<URL-PATH>" /var/log/apache2/access_log | awk '{system("host  " "\""$1"\"")}' | uniq </nowiki></code>
  
#--- Passwort generieren
+
==== Netzwerk Statistiken aus /proc/net/netstat dargestellt ====
openssl rand -base64 8
+
:<code><nowiki> 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 </nowiki></code>
 +
 
 +
==== finde alle symlinks die auf DATEI zeigen ====
 +
:<code><nowiki> find / -type l -print 2>/dev/null | while read symlink; do echo -n "$symlink"; targ=$(readlink -f "$symlink"); echo "-> $targ"; done | grep "DATEI"  </nowiki></code>
 +
 
 +
==== finde alle symlinks die auf DIRECTORY zeigen ====
 +
:<code><nowiki> 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" </nowiki></code>
 +
 
 +
==== 8 Byte Passwort generieren ====
 +
:<code><nowiki> openssl rand -base64 6 </nowiki></code>
 +
 
 +
==== Perl Oneliner um ein Unix-Socket File (Typ: s) zu erstellen ====
 +
:<code><nowiki> perl -MIO::Socket::UNIX -e 'IO::Socket::UNIX->new(Type => SOCK_STREAM(),Local => "/tmp/einsocket");' </nowiki></code>
 +
 
 +
==== SSH mit Keys statt Passwort zu entferntem Host ====
 +
Im Homeverzeichnis des Users (SSH-Client):
 +
 
 +
Schauen was schon an Keys besteht
 +
:<code><nowiki>ls -la .ssh/</nowiki></code>
 +
RSA Schlüsselpaar erstellen (RSA mit 4096 Bit)
 +
:<code><nowiki>ssh-keygen -t rsa -b 4096</nowiki></code>
 +
Public-Key zum entfernten Host (SSH-Server) transferieren
 +
:<code><nowiki>cat .ssh/id_rsa.pub | ssh <user>@<host> 'cat >> .ssh/authorized_keys'</nowiki></code>
 +
<br />
 +
... oder noch besser ... mitttels elliptischer Kurven ein Ed25519 Schlüsselpaar:
 +
:<code><nowiki>ssh-keygen -t ed25519</nowiki></code>
 +
Public-Key zum entfernten Host transferieren
 +
:<code><nowiki>cat .ssh/id_ed25519.pub | ssh <user>@<host> 'cat >> .ssh/authorized_keys'</nowiki></code>
 +
 
 +
==== MAC Adresse des ethx Interface ermitteln ====
 +
:<code><nowiki> ip a s dev ethx | awk '$1=="link/ether" {print $2}' </nowiki></code>
 +
 
 +
==== Serielle Console mit Python (aka minicom) ====
 +
:<code><nowiki> python -m serial.tools.miniterm -e -p /dev/ttyXXXX -b 115200 </nowiki></code>
 +
 
 +
==== Top 10 Prozesse die realen (physikalischen) Speicher im RAM belegen (RSS - Resident Set Size) ====
 +
:<code><nowiki> 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}' </nowiki></code>
 +
 
 +
==== Alle Grub Menueinträge (menuentries) auflisten ====
 +
:<code><nowiki> awk -F\' '/^menuentry / {print $2}' /boot/grub/grub.cfg|cat -n|awk '{print $1-1,$1="",$0}' </nowiki></code>
 +
 
 +
==== Datei mit Passwort verschlüsseln ====
 +
'meine-datei.txt' Verschlüsseln:
 +
:<code><nowiki> openssl aes-256-cbc -e -pass "pass:<mein-passwort>" -pbkdf2 -in meine-datei.txt > meine-datei.txt.enc </nowiki></code>
 +
... oder mit interaktiver Passworteingabe:
 +
:<code><nowiki> openssl aes-256-cbc -e -pbkdf2 -in meine-datei.txt > meine-datei.txt.enc </nowiki></code>
 +
 +
 
 +
'meine-datei.txt.enc' wieder Entschlüsseln:
 +
:<code><nowiki> openssl aes-256-cbc -d -pass "pass:<mein-passwort>" -pbkdf2 -in meine-datei.txt.enc > meine-datei.txt </nowiki></code>
 +
... oder mit interaktiver Passworteingabe:
 +
:<code><nowiki> openssl aes-256-cbc -d -pbkdf2 -in meine-datei.txt.enc > meine-datei.txt </nowiki></code>
 +
 
 +
==== UNIX-Socket Verbindungen finden ====
 +
Ein <code>ls</code> auf den Socket-Filedeskriptor der PID:
 +
:<code><nowiki> ls -l /proc/<PID>/fd/<FD> </nowiki></code> ergibt z.B.: <code>/proc/3913/fd/4 -> 'socket:[1317840]'</code>
 +
... dann mit dem Socket-Inode (hier 1317840):
 +
:<code><nowiki> netstat -nxp | grep 1317840 </nowiki></code> ergibt: <code>unix  2      [ ]        DGRAM                    1317840  3913/cron</code>
 +
... den 'Program name' nehmen und mit diesem (hier 'cron') ein:
 +
:<code><nowiki> lsof +E  -aUc 'cron' </nowiki></code>. Voilà, ergibt:
 +
<code><nowiki>
 +
COMMAND  PID USER  FD  TYPE            DEVICE SIZE/OFF    NODE NAME</nowiki></code><br>
 +
<code><nowiki>rsyslogd 1458 root    3u  unix 0x000000003505f3cd      0t0  14315 /dev/log type=DGRAM ->INO=15343 2879,rtkit-dae,3u</nowiki></code><br>
 +
 
 +
<code><nowiki>cron    3913 root    4u  unix 0x00000000316ca941      0t0 1317840 type=DGRAM ->INO=14315 1458,rsyslogd,3u
 +
</nowiki></code> <br>
 +
Es besteht also eine UNIX-Socket Verbindung zwischen 'cron' und 'rsyslogd'.

Aktuelle Version vom 4. Oktober 2023, 13:06 Uhr

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'.