Nützliche Einzeiler: Unterschied zwischen den Versionen

Aus Si:Wiki von Siegrist SystemLösungen - Informatik und Rezepte
Wechseln zu: Navigation, Suche
K (Ersetze "foo" mit "bar" AUSSER in Zeilen die "baz" enthalten)
K
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 14: Zeile 14:
 
Die Parameter <code><nowiki> -nNT </nowiki></code> erlauben für den User "serveruser" keine Shell in der /etc/passwd zu setzen.<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 von remote -> local ====
+
==== netcat filetransfer ====
#local: <code><nowiki> nc -l -p 7788 > file.txt </nowiki></code><br>
+
#local (192.168.1.117): <code><nowiki> nc -l -p 7788 > file.txt </nowiki></code><br>
#remote: <code><nowiki> nc 192.168.1.113 7788 > file.txt </nowiki></code>
+
#remote: <code><nowiki> nc 192.168.1.117 7788 < file.txt </nowiki></code>
  
 
==== netcat proxy ====
 
==== netcat proxy ====
Zeile 24: Zeile 24:
 
:Python2: <code><nowiki> python -m SimpleHTTPServer [port] </nowiki></code>
 
:Python2: <code><nowiki> python -m SimpleHTTPServer [port] </nowiki></code>
 
:Python3: <code><nowiki> python3 -m http.server [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 ====
Zeile 59: 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>
  
==== ssh mit Keys statt Passwort zu entferntem Host ====
+
==== SSH mit Keys statt Passwort zu entferntem Host ====
Im Homeverzeichnis des Users:
+
Im Homeverzeichnis des Users (SSH-Client):
  
 
Schauen was schon an Keys besteht
 
Schauen was schon an Keys besteht
Zeile 66: Zeile 70:
 
RSA 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 />
 
<br />
Zeile 75: Zeile 79:
  
 
==== 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) ====
Zeile 85: Zeile 89:
 
==== Alle Grub Menueinträge (menuentries) auflisten ====
 
==== 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>
 
:<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'.