Nützliche Einzeiler: Unterschied zwischen den Versionen

Aus Si:Wiki von Siegrist SystemLösungen - Informatik und Rezepte
Wechseln zu: Navigation, Suche
K (die 1000 meistgenutzten Ports aus nmap-services als String komma-separiert)
K
 
(29 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
==== ssh forwarding von IPv4 Host zu IPv6 Host (www.example.org) über ein Intermediate Dualstack System ====
+
==== 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:  
 
create the tunnel via intermediate system on your local IPv4 host:  
 
:<code><nowiki>ssh -4 user@intermediate-system -L 2222:[2606:2800:220:1:248:1893:25c8:1946]:22</nowiki></code><br>
 
:<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:
 
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>
 
:<code><nowiki>ssh user@localhost:2222</nowiki></code>
 +
 +
==== 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.<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>
  
 
==== netcat filetransfer ====
 
==== netcat filetransfer ====
#local: <code><nowiki> nc -l -p 77 -e "tee gaga" -v </nowiki></code><br>
+
#local (192.168.1.117): <code><nowiki> nc -l -p 7788 > file.txt </nowiki></code><br>
#remote: <code><nowiki> cat file.tar.gz | netcat 192.168.1.113 77 </nowiki></code>
+
#remote: <code><nowiki> nc 192.168.1.117 7788 < file.txt </nowiki></code>
  
 
==== netcat proxy ====
 
==== netcat proxy ====
 
:<code><nowiki> nc -l -p 1234 | nc www.server.com 80 </nowiki></code>
 
:<code><nowiki> nc -l -p 1234 | nc www.server.com 80 </nowiki></code>
 +
 +
==== Dateifreigabe mit Python HTTP-Server ====
 +
:Python2: <code><nowiki> python -m SimpleHTTPServer [port] </nowiki></code>
 +
:Python3: <code><nowiki> python3 -m http.server [port] </nowiki></code>
 +
 +
==== Ersetze "foo" mit "bar" in einer Datei ====
 +
:<code><nowiki> sed -i 's/foo/bar/g' filename </nowiki></code>
 +
:<code><nowiki> sed 's/foo/bar/g' filename > filename-neu </nowiki></code>
  
 
==== Ersetze "foo" mit "bar" NUR in Zeilen die "baz" enthalten ====
 
==== Ersetze "foo" mit "bar" NUR in Zeilen die "baz" enthalten ====
:<code><nowiki> sed '/baz/s/foo/bar/g' </nowiki></code>
+
:<code><nowiki> sed -i '/baz/s/foo/bar/g' filename </nowiki></code>
  
 
==== Ersetze "foo" mit "bar" AUSSER in Zeilen die "baz" enthalten ====
 
==== Ersetze "foo" mit "bar" AUSSER in Zeilen die "baz" enthalten ====
:<code><nowiki> sed '/baz/!s/foo/bar/g' </nowiki></code>
+
:<code><nowiki> sed -i '/baz/!s/foo/bar/g' filename </nowiki></code>
  
 
==== Ausgabe der Zeilen 45-50 einer Datei ====
 
==== Ausgabe der Zeilen 45-50 einer Datei ====
Zeile 46: Zeile 63:
 
:<code><nowiki> perl -MIO::Socket::UNIX -e 'IO::Socket::UNIX->new(Type => SOCK_STREAM(),Local => "/tmp/einsocket");' </nowiki></code>
 
:<code><nowiki> perl -MIO::Socket::UNIX -e 'IO::Socket::UNIX->new(Type => SOCK_STREAM(),Local => "/tmp/einsocket");' </nowiki></code>
  
==== Aliases aus sendmail /etc/aliases extrahieren und mit Domainname in eine Postgresql Datenbank als source,destination Paar einfügen ====
+
==== SSH mit Keys statt Passwort zu entferntem Host ====
Der Oneliner gibt lediglich die 'psql' Statements aus, es wird nichts geschrieben oder verändert.
+
Im Homeverzeichnis des Users (SSH-Client):
Sind in der Aliases-Datei bereits Einträge in der Form 'user@domain.tld' vorhanden, werden diese so übernommen. Einträgen ohne '@domain.tld' wird jeweils ein '@example.ch' angehängt.
+
:<code><nowiki> cat /etc/aliases | grep -Pv "^#.*" | grep -v "|" | awk -F: '{ split($2,arr,","); for (i in arr) print $1,arr[i]; }' | sed 's/\\//' | perl -pe 's/(^(?!\S+\@)\S+)\s+((?!.+\@).+)/$1\@example.ch\t $2\@example.ch/' | sort  | awk '{print "psql -h 127.0.0.1 -U dbuser -d database -w -X --set ON_ERROR_STOP=on -t --no-align -t --no-align --field-separator \"|\" --single-transaction -c \"insert into schema.forward (source, destination) values (\047"$1"\047, \047"$2"\047);\"" }' </nowiki></code>
+
  
==== ssh mit Keys statt Passwort zu entferntem Host ====
 
 
Schauen was schon an Keys besteht
 
Schauen was schon an Keys besteht
 
:<code><nowiki>ls -la .ssh/</nowiki></code>
 
:<code><nowiki>ls -la .ssh/</nowiki></code>
Schlüsselpaar erstellen (RSA mit 4096 Bit)
+
RSA Schlüsselpaar erstellen (RSA mit 4096 Bit)
 
:<code><nowiki>ssh-keygen -t rsa -b 4096</nowiki></code>
 
:<code><nowiki>ssh-keygen -t rsa -b 4096</nowiki></code>
Public-Key zum entfernten Host transferieren
+
Public-Key zum entfernten Host (SSH-Server) transferieren
 
:<code><nowiki>cat .ssh/id_rsa.pub | ssh <user>@<host> 'cat >> .ssh/authorized_keys'</nowiki></code>
 
:<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 ====
 
==== MAC Adresse des ethx Interface ermitteln ====
:<code><nowiki> ip address show dev ethx | awk '$1=="link/ether" {print $2}' </nowiki></code>
+
:<code><nowiki> ip a s dev ethx | awk '$1=="link/ether" {print $2}' </nowiki></code>
  
 
==== Serielle Console mit Python (aka minicom) ====
 
==== Serielle Console mit Python (aka minicom) ====
 
:<code><nowiki> python -m serial.tools.miniterm -e -p /dev/ttyXXXX -b 115200 </nowiki></code>
 
:<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'.