Il blog è stato spostato! Redirecting...

Stai per essere spostato sul nuovo indirizzo. Se non funziona vai su http://www.lejubila.net e aggiorna il tuo bookmark.

Visualizzazione post con etichetta grep. Mostra tutti i post
Visualizzazione post con etichetta grep. Mostra tutti i post

1.8.08

Escludere "grep" dall'output di "ps"

Molte volte si presenta la necessità di ricavare informazioni su un i processi in esecuzione utilizzando il comando ps in combinazione con grep, per esempio:


#ps ax |grep "ssh -N -R 3333"

7988 ? Ss 0:00 ssh -N -R 3333:localhost:222 host.com -f
8067 pts/1 R+ 0:00 grep ssh -N -R 3333


Si può notare che l'ultima riga dell'output riguarda il processo di grep utilizzato per estrarre le righe contenenti ssh.
Potremmo avere l'esigenza di non dovere fare comparire quest'ultima riga. Qui di seguito elenco alcune soluzioni:

# ps ax |grep "ssh -N -R 3333" | grep -v grep

con il grep -v grep non considera le righe contenenti la stringa grep

# ps ax |grep "[s]sh -N -R 3333"

invece grep [s]sh filtra soltanto le righe al cui interno c'è la parola ssh

# ps u -C ssh

l'opzione -C di ps estrae solo i processi del comando specificato, il problema è che nel nostro caso non possiamo filtrare tutta la stringa ssh -N -R 3333 in quanto ps u -C "ssh -N -R 3333" non sono riusci to a farlo funzionare

# ps u -N -C grep | grep "ssh -N -R 3333"

così invece prima togliamo tutte le righe di processi generati dal comando grep e poi filtriamo quello che interessa


Sicuramente le diverse soluzioni non sono perfette, può andare bene una piuttosto che un'altra a seconda dei casi specifici.

Ci fossero altre soluzione sarebbero ben gradite.

7.7.08

Connessione ssh verso un host dietro nat

Supponiamo di aver un host A con un indirizzo pubblico e un host B su una lan dietro Nat, a questo punto vogliamo raggiungere dall'host A l'host B tramite ssh ma non possiamo mettere mano al gateway che Natta B.
Una possibile soluzione è fare aprire a B un tunnel ssh su A tramite il quale poi ci collegheremo

open_tunnel_ssh.sh

#!/bin/bash
PORTAAPERTA=`ps u -N -C grep |grep "ssh -N -R 3333" | tr -s ' ' | cut -d ' ' -f 11 | wc -l`

if [ "$PORTAAPERTA" == "0" ]; then
ssh -N -R 3333:localhost:22 user@host_A.com -f
fi

questo script può essere inserito nel crontab di B in modo che venga eseguito ogni cinque minuti. Se il tunnel è già aperto la connessione ssh non verrà rieseguita altrimenti verra aperta la porta 3333 sull'host A che punterà alla porta 22 (ssh) dell'host B

A questo punto dall'host A possiamo impartire il comando

ssh -p 3333 localhost

e avremo accesso a l'host B

nell'eventualità che il tunnel cada questo verrà ripristinato dopo cinque minuti grazie al crontab.

Per fare funzionare il tutto è fondamentale che la connessione ssh da B verso A funzioni senza dovere impartire la password ma grazie alla chiave pubblica di B precedentemente generata
ssh-keygen -t dsa
e salvata in
~/.ssh/authorized_keys
di A