Vai al contenuto

Capita di dover aprire un tunnel socks5 ma se poi questo tunnel deve restare aperto per ore e magari resistere a vari eventi avversi non basta il semplice comando ssh

ssh -ND 8080 root@192.168.1.1

perché se il server destinazione (il 192.168.1.1) ad esempio viene riavviato il tunnel cade. Per ovviare a questo ed altri inconvenienti basta un breve script che si occupa di verificare che il tunnel sia aperto e, in caso contrario, che lo apra e che faccia tutto questo all'infinito. Quantomeno fino a quando non lo blocchiamo a mano noi.

Questo è lo script bash

#!/bin/bash
# Script che apre e tiene aperto un tunnel socks5
# porta utente e ip o dns sono hardcoded ma volendo potrebbero essere messi come parametri

# Ciclo while infinito
while true
do
# Il comando if verifica l exit code del comando che sta cercando qualcosa in LISTEN sulla porta 8080 che è il mio tunnel 
  if netstat -an | grep 8080 | grep -q LISTEN 
  then
# Se lo ha trovato allora entra qui e attende 1 secodo poi salta il ramo else e ricomincia il coclo infinito
    sleep 1
  else
# Se non lo trova allora entra qui e il comando sotto crea in background il tunnel e poi aspetta 2 secondi poi continua il ciclo infinito
    nohup ssh -ND 8080 root@192.168.1.1 > /dev/null 2>&1 &
    sleep 2
  fi
done

Se state lavorando in Linux su un applicazione che ha molti file di configurazione torna utile poter fare delle modifiche in blocco a tutti questi file, in particolare sostituire tutte le occorrenze di una stringa in tutti file con una stringa sostitutiva.

Si può fare usando find per localizzare tutti i file di configurazione e sed per effettuare le sostituzioni il tutto in una "semplice" e singola riga di comando.

find /dove/sono/i/file/ -type f -name "*.cfg" -print0 | xargs -0 sed -i 's/StringaAttuale/StringaSostitutiva/g'

Mini spiegazione

/dove/sono/i/file/ è il punto a partire dal quale ci sono i file di configurazione e find va a cercare anche nelle sotto cartelle

I file di configurazione terminano tutti con .cfg

StringaAttuale e StringaSostitutiva si spiegano da soli e sappiate che se volete eliminare la StringaAttuale basta non mettere nulla al posto di StringaSostitutiva e che StringaAttuale può anche essere una regular expression.