Domanda

Ho uno script che si collega a un server usando ssh . Durante un ciclo, non riesce a connettersi al secondo server dopo essersi connesso al primo. Immagino di dover uscire da quel server per tornare allo script chiamante. Come posso uscire dalla sessione ssh?

while read dbname myip
do
ssh root@$myip "mysqldump - some command " | mysql -hhost -u -p myLocalDatabase > /dev/null 2>&1
done << iplist
db1 111.111.111.111
xyz 222.222.222.222
iplist
È stato utile?

Soluzione

reindirizza stdin a / dev / null

while  read -r dbname myip
do
 0</dev/null ssh ...... <whatever> .........
done < "iplist"

Altri suggerimenti

A un livello leggermente superiore di astrazione, potresti essere interessato ad es. Chef :

  

Chef è un framework di integrazione di sistemi, creato per offrire i vantaggi della gestione della configurazione all'intera infrastruttura. Con Chef puoi:

     
      
  • Gestisci i tuoi server scrivendo codice, non eseguendo comandi. (tramite libri di cucina)
  •   
  • Integrazione stretta con applicazioni, database, directory LDAP e altro. (tramite librerie)
  •   
  • Configura facilmente le applicazioni che richiedono la conoscenza dell'intera infrastruttura (" Quali sistemi eseguono la mia applicazione? " " Qual è l'attuale server di database master? ")
  •   

Se si desidera emettere lo stesso comando su più host SSH, è possibile utilizzare DSH :

  

dsh è un'implementazione di un wrapper per l'esecuzione di più comandi di shell remota (rsh / remsh / ssh).

Se non hai spazi bianchi nelle righe del file " dbname " ;, puoi usare questo:

for myip in $(cat dbname); do
   ...
done

(o usa fabric: http://docs.fabfile.org/en/latest/)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top